使用Hibernate获取多列主键

Pet*_* B. 2 java hibernate primary-key composite-primary-key

假设我有一个看起来像这样的类:

public class MyClass {
  @Id
  @Column(name = "ID")
  private long Id;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用hibernate会话对类进行get或load,如下所示:

MyClass a = (MyClass)session.get(MyClass.class, new Long(100));
Run Code Online (Sandbox Code Playgroud)

但是,假设我有一个以多列为主键的类:

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;
  @Id
  @Column(name = "ID")
  private long id;

  @Id
  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用get或load这样的类?

Koi*_*oer 7

尝试使用和@IdClass@EmbeddedId

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;

  @EmbeddedId
  private MyJoinClassKey key;
}

public MyJoinClassKey implements Serializable{

  @Column(name = "ID")
  private long id;

  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}
Run Code Online (Sandbox Code Playgroud)

然后用

MyJoinClass a = (MyJoinClass )session.get(MyJoinClass .class, new MyJoinClassKey (1, "email"));
Run Code Online (Sandbox Code Playgroud)

看看这个问题,是广泛的解释.基本上,hibernate有复合键的机制.