2017-09-02 101 views
0

我使用的是Spring數據JPA
我有以下實體在ManyToOne關係的許多方面創建實體的實例

實體

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 = new Contact(); 
contact.setOwner(?); 

但是,雖然創建我只會擁有owner_id。
我想在創建時設置owner_id,但有關聯(查詢時)我已將其映射到具體類(Person)。

我已經試過這

class Contact{ 

@Column("owner_id") 
private String ownerId; 
@ManyToOne 
@JoinColumn("owner_id") 
private Person pwner; 

} 

但其投擲的錯誤重複參考owner_id。

我不想用owner_id查詢Person Table,並設置創建聯繫人時設置的「Person」引用。

我想使用owner_id插入和所有者參考,我可能會得到給聯繫人的所有者詳細信息。 如何解決這個問題。

在此先感謝。

回答

0
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)

0

你需要一個用戶。此用戶位於數據庫中。 JPA允許將數據庫表的行映射到實體。你有這個用戶的ID。所以......僅僅使用JPA API獲取用戶:

contact.setOwner(entityManager.find(User.class, userId)); 

contact.setOwner(entityManager.getReference(User.class, userId)); 

第一個真正得到用戶的詳細信息從數據庫中,從而檢查該用戶確實存在。

第二個假定用戶存在,只是創建一個懶惰的初始化代理,而不查詢數據庫。

+0

我怎麼能做到這一點與Spring Data JPA,我不創建/使用實體管理器? –

+1

你爲什麼不讀javadoc? https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html?is-external=true#findOne-ID-,https:// docs .spring.io /彈簧數據/ JPA /文檔/電流/ API /組織/ springframework的/數據/ JPA /庫/ JpaRepository.html#getOne-ID-。如果你拒絕閱讀你正在使用的重要類的javadoc,你就不能成爲一個體面的開發者。 –