簡體   English   中英

選擇查詢中的休眠-外鍵對象為Null

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

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