[英]Hibernate-Foreign key object Null on Select Query
我有兩個表,例如:用戶和角色。 在用戶和角色之間具有多對一關系(一個用戶可以包含許多角色)
我使用SQL查詢將數據以role_id(假定Role表的pk)作為外鍵插入到User表中。
現在,當我嘗試獲取具有特定角色的User的記錄時。
我正在使用以下代碼來獲取User對象。
User user=(User)session.get('User.class',user_id);
Role role=user.getRole();
在執行上面的代碼行時,有時我會得到用戶對象,有時卻沒有。 對象之間的關系映射如下。
<many-to-one name="role" class="com.example.Role" fetch="select">
<column name="role_id" precision="14" scale="0" />
</many-to-one>
<set name="user" cascade="delete" table="User" >
<key>
<column name="role_id" not-null="true" />
</key>
<one-to-many class="com.example.User" />
</set>
有什么辦法可以防止它發生? 是否有可能在某些情況下,選擇查詢會給我輸出,有時為空。
您的設計似乎存在一個基本錯誤。 您說一個用戶可以包含多個角色。 這意味着外鍵(指向用戶的PK)應該在角色中。 但是,您似乎已將外鍵放在User中。
除了DUKE答案,誰明確指出您的映射表明角色有許多用戶而不是您的要求,您的代碼仍然存在一些問題:
首先,您需要在一對多的一面添加inverse =“ true”。 由於您具有雙向關聯,因此只有一方可以擁有該關系:
<set name="user" cascade="delete" table="User" inverse="true">
<key>
<column name="role_id" not-null="true" />
</key>
<one-to-many class="com.example.User" />
</set>
然后,與用戶在同一查詢中獲取角色會更有效:
User user = (User)
session.createQuery(
"select u from User left join fetch u.role where u.id = :user_id')
.setParameter("user_id", user_id)
.uniqueResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.