との選択はOneToOne
、Secondarytable
オブジェクトモデルによって異なります(つまり、ユーザー拡張機能のエンティティが必要な場合)。OneToOne
アソシエーションと2つのエンティティを使用することにしました。
(共有主キーの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
関連する質問