[英]Create instance of the Entity in the Many side of ManyToOne Relationship
我正在使用Spring Data JPA 。
我有以下實體
人實體
class Person{
private String id;
@OneToMany(mappedBy="owner")
private List<Contact> contacts;
...
}
和聯系實體
class Contact{
private String id;
@ManyToOne
@JoinColumn(name="owner_id")
private Person owner;
...
}
當我想創建Contact實例時,我對如何映射所有者詳細信息感到困惑。
Contact contact = new Contact();
contact.setOwner(?);
但是在創建時,我將只有owner_id。
我想在創建時單獨設置owner_id,但是要擁有關聯(在查詢時),我已將其映射到具體的類(人)。
我已經試過了
class Contact{
@Column("owner_id")
private String ownerId;
@ManyToOne
@JoinColumn("owner_id")
private Person pwner;
}
但是它的拋出錯誤重復了對owner_id的引用。
我不想使用owner_id查詢人員表,並在創建聯系人時設置要設置的“人員”引用。
我想在插入和所有者引用時使用owner_id,我可以通過它獲得給定聯系人的所有者詳細信息。 如何解決這個問題。
提前致謝。
您需要一個用戶。 該用戶在數據庫中。 JPA允許將數據庫表的行映射到實體。 您具有該用戶的ID。 所以...只需使用JPA API吸引用戶:
contact.setOwner(entityManager.find(User.class, userId));
要么
contact.setOwner(entityManager.getReference(User.class, userId));
第一個實際上是從數據庫中獲取用戶的詳細信息,從而檢查用戶是否確實存在。
第二個假設用戶存在,ans只是創建了一個延遲初始化的代理,而不查詢數據庫。
class Person {
private String id;
@OneToMany(mappedBy="owner")
private List<Contact> contacts;
}
class Contact {
private String id;
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn(name="owner_id", nullable=false,updatable=false)
private Person owner;
@Column("owner_id")
private String ownerId;
}
實際上,這允許我在創建聯系人對象時使用ownerId:String
字段,並且owner:Owner
對象可以幫助我獲取給定聯系人詳細信息的所有者詳細信息(如果需要)。這樣我就可以無需使用findOne(id)
或getOne(id)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.