OneToOne
之间的选择Secondarytable
取决于对象模型(即,如果您想要用户扩展的实体)。我选择使用一个OneToOne
关联和两个实体。
对于User
(注意使用PrimaryKeyJoinColumn
共享主键):
@Entity
public class User {
@Id private Long id;
private String firstName;
private String lastName;
@OneToOne
@PrimaryKeyJoinColumn
private UserExt userExt;
public UserExt getUserExt() {
return userExt;
}
public void setUserExt(UserExt userExt) {
this.userExt = userExt;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
和UserExt
:
@Entity
public class UserExt {
@Id private Long id;
private String moreInfo;
@Temporal(TemporalType.DATE)
private Date lastModified;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMoreInfo() {
return moreInfo;
}
public void setMoreInfo(String moreInfo) {
this.moreInfo = moreInfo;
}
public Date getLastModified() {
return lastModified;
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
}
使用上述实体,以下 HQL 查询:
select u.firstName, u.userExt.moreInfo from User u
生成以下 SQL 查询:
select
userx0_.firstName as col_0_0_,
userextx1_.moreInfo as col_1_0_
from
User userx0_,
UserExt userextx1_
where
userx0_.id=userextx1_.id
这是预期的结果。
PS:JPA 1.0 实际上对派生标识符的支持很差(JPA 2.0 中的情况要好得多),除非您使用 Hibernate 特定的生成器,否则您必须Id
手动设置。有关详细信息,请参阅下面的问题。UserExt
foreign
相关问题