表:person
@SecondaryTable映射
id (pk)
first_name
last_name
實體:
@Entity
@Table(name="person")
public class Person {
@Id
@Column(name="id")
private String id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="birthDate")
private String birthDate;
@Column(name="detail")
private String detail;
}
表:activity
id(pk)
name;
實體:
@Entity
@Table(name="activity")
public class Activity {
@Id
@Column(name="id")
private String id;
@Column(name="name")
private String name;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="activity_id")
private List<PersonRole> personRoleList;
}
表:person_role
activity_id
person_id
role_name
pk(activity_id,person_id)
實體:
@Entity
@Table(name="person_role")
public class PersonRole {
@Id
PersonRolePK personRolePk;
// private String personName; /* I want this value to be loaded form person table using the person_id when a PersonRole is reader from database */
@Column(name="role_name")
private String roleName;
}
@Embeddable
public class PersonRolePK implements Serializable
{
public static final long serialVersionUID = 1L;
@Column(name="activity_id")
public String activityId;
@Column(name="person_id")
public String personId;
}
這是爲我工作很好,當我在數據庫中存儲數據
它也如預期,並加載所有相關PersonRole當我想要從數據庫的活動
現在除此之外,我想在PersonRole加載時從person
表中填入(註釋)類的personName
字段。
我閱讀了關於@SecondaryTable
的註釋,並與它接近。
但問題是所有的教程和文檔也http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e2235)顯示 ,如果我想映射輔助表,有必要在兩個表中具有相同數量的主鍵字段(如果複合鍵)而那些申請將使用@PrimaryKeyJoinColumn
映射但在我的情況下,沒有必要使用多個鍵此人擁有一個主鍵
那麼,有沒有一種方法來映射包含複合主鍵的表包含單個主鍵的表格使用@SecondaryTable
?
OR,
是否有任何其他好的方法來實現我想要什麼?
我必須說這是一個好方法。但我只需要'first_name'和'last_name'而不是'Person'的引用它自己。和'人'pojo可以有一些其他領域像'birthDate''detail'(我道歉我沒有添加這些問題) – Saif 2014-11-15 06:28:03
我可以得到一些選擇性領域使用ManyToOne? – Saif 2014-11-15 06:29:55