0

我有这样的课...

@Entity
public class User{
  private String userId;
  @Id
  public String getUserId(){
    return userId;
  }
  public void setUserId(String userId){
    this.userId = userId;
  }
}

@Embeddible
public class RegPk{
  private String serial;
  private String userId;
  ....
}

@Entity
@IdClass(RegPk.class)
public class Registration {
  private String userId, serial;

  private User user

  @Id
  @Column(name="SRL_C")
  public String getSerial() {return serial;}
  public void setSerial(String serial) {this.serial = serial;}
  @ManyToOne(cascade={CascadeType.REFRESH})
  @JoinColumn(name="USERID", referencedColumnName="USERID", nullable = false)
  public User getUser() {return user;}
  public void setUser(User user) {this.user = user;}
  @Id
  @Column(name="USERID", nullable = false)
  public String getUserId() {
    return userId;
  }
  public void setUserId(String userId) {
    this.userId = userId;
  }

}

RegPk pk = new RegPk();
pk.setSerial(dr.getSerial());
pk.setUserId(dr.getUserId());
Registration userOld =  em.find(Registration.class, pk);

但是当我尝试运行它时,我会返回 null。我发誓我以为我有它的工作所以......

1.)这种事情甚至可能吗?2.)我做错了什么?

4

1 回答 1

1

是的,这是可能的,只要您使用MapsId 注释。否则,您有两个不同的字段映射到同一列,这是无效的。

javadoc 提供了一个几乎与您的情况完全匹配的示例。

于 2013-10-08T20:14:14.170 回答