如何定义两个主键Hibernate JPA

时间:2013-09-28 16:53:12

标签: sql hibernate jpa primary-key

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

一样
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;


}

2 个答案:

答案 0 :(得分:0)

Documentation

@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;
}

答案 1 :(得分: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;
    //...
    

    }