繁体   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