使用具有多列主键的Hibernate Get

问题描述 投票:3回答:2

说我有一堂课,看起来像这样:

public class MyClass {
  @Id
  @Column(name = "ID")
  private long Id;
}

我可以使用休眠会话对此类进行获取或加载:

MyClass a = (MyClass)session.get(MyClass.class, new Long(100));

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

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

是否可以在此类中使用get或load?

java hibernate primary-key composite-primary-key
2个回答
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;
}

然后使用

MyJoinClass a = (MyJoinClass )session.get(MyJoinClass .class, new MyJoinClassKey (1, "email"));

[看这个问题,this得到了广泛的解释。基本上,休眠具有复合键的机制。


0
投票

在休眠状态下是(documentation):

MyJoinClass a = session.get(MyJoinClass.class, new MyJoinClass(100, 200));

只需确保具有组合键所有部分的构造函数(并且不要忘记没有参数的默认公共构造函数):

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;

  public MyJoinClass() {}

  public MyJoinClass(long id, long emailAddressId) {
    this.id= id;
    this.emailAddressId= emailAddressId;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.