0
多個多對一關係,我有3間多對一的關係Hibernate的急切和懶惰加載與實體
@Entity
@Table(name="MANDATE")
public class Mandate {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID", nullable=false)
private Long Id;
@ManyToOne
@JoinColumn(name="ID_PERSONNE", nullable=false)
private Person person;
@Column(name="TITRE", nullable=false)
private String titre;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ID_LIGUE", nullable=false)
private League league;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ID_FEDERATION", nullable=false)
private Federation federation;
授權類我一個人類的一對多關係
@OneToMany(mappedBy="person", fetch=FetchType.LAZY)
private Set<Mandat> mandates;
這意味着,在我的數據庫中一個人可以在聯盟或聯盟中擁有任務。 如果他在聯盟中有任務,那麼聯邦領域將是空的,反之亦然。
但在我的控制器,當我做:
person.getMandates().size();
我總是得到一個大小爲0的元素。
產生的Hibernate查詢是這樣看(我簡化它):
SELECT MANDATE.*, LEAGUE.*, FEDERATION.*
from MANDATE
inner join LEAGUE on MANDATE.ID_LEAGUE = LEAGUE.ID
inner join FEDERATION on MANDATE.ID_FEDERATION = FEDERATION.ID WHERE MANDATE.ID_PERSON = 1;
這意味着生成的請求是尋找與非空聯賽和聯合會場mandat領域,但不曾在我的數據庫中爲true。
我注意到,如果我把一個延遲加載到我的領域我正在嘗試的結果:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ID_LIGUE", nullable=false)
private League league;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ID_FEDERATION", nullable=false)
private Federation federation;
我在做什麼錯?
你已經告訴Hibernate連接列不能爲空。但是你也說過,「如果他在聯盟中有任務,那麼聯盟領域將是空的,而反過來是真的。」聯接列如何不能爲空,同時聯盟爲空。這是矛盾的。 –
就是這樣,謝謝! – Louisprrn