簡體   English   中英

在ManyToOne關系的多邊中創建實體的實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM