0

我在 java 中有一个类,它有一个数字 ID 和用户名(一个自然主键)。我想用 SQL 来定义 hibernate somthng 中的两个主键

Create table X(
    Int ID PK,
    String name PK,
    String adress,
    .....
)

我已经有了这个:

@Entity
@Table(name="Xtable")
public class Xclass{

@Id
@GeneratedValue
@Column(name="ID_X", length=100)    
private long ID_X;



@Column(name="Name_X", length=100)  
private String Name_X;


}
4

2 回答 2

0

两种常见的方法涉及使用 @IdClass 或 @EmbeddedId 注释:

  1. 使用 @IdClass 注释。见http://www.objectdb.com/api/java/jpa/IdClass

    @Entity
    @Table(name = "X")
    @IdClass(XIdClass.class)
    公共类 XClass 实现 Serializable{

    @Id
    private Long id;
    
    @Id
    private String name;
    
    private String address;
    //...  
    

    }

    //1. 必须实现 java.io.serializable
    //2. 必须重写 equals() 和 hashCode()
    公共类 XIdClass 实现 Serializable{

    private Long id;
    
    private String name;
    
    //accessors/mutators ...
    //override equals() and hashCode() ...   
    

    }

  2. 使用 @EmbeddedId 注释。请参阅http://www.objectdb.com/api/java/jpa/EmbeddedId

    @Entity
    @Table(name = "X")
    公共类 XClass 实现 Serializable{

    @EmbeddedId
    private XEmbeddedId xPK;
    
    private String address;
    //...
    

    }

    @Embeddable 公共类 XEmbeddedId 实现 Serializable{

    private Long id;
    
    private String name;
    //...
    

    }

于 2013-09-29T19:05:55.710 回答
0

文档

@Entity
class User {
  @EmbeddedId
  @AttributeOverride(name="firstName", column=@Column(name="fld_firstname")
  UserId id;

  Integer age;
}

@Embeddable
class UserId implements Serializable {
  String firstName;
  String lastName;
}
于 2013-09-28T16:58:41.707 回答