休眠可选关系不显示数据

hibernate optional relationship not showing data

我正在使用带 MySQL Db 的休眠模式。我在某些领域和关系中有 table 业务。在关系中,一个关系是可选的。

 @ManyToOne(fetch = FetchType.LAZY)
 @NotFound(action=NotFoundAction.IGNORE)
 @JoinColumn(name = "modified_by", nullable = true)
 public Users getModifiedBy() {
     return this.modifiedBy;
 }

public void setModifiedBy(Users modifiedBy) {
    this.modifiedBy = modifiedBy;
}

现在,当我使用以下 hql 获取数据时,它工作正常

   String hql = "from Business";
   Query query = session.createQuery(hql);
   list = query.list();

如果我将 hql 更改为以下内容,则它会显示 0 个结果。

String hql = "select new com.ba.Business(business.businessId,business.slUsersByCreatedBy.userId,business.modifiedBy.userId,business.bizType.bizTypeId) from  com.ba.Business business order by business.businessName";

如何管理它,因为 modifiedBy 为空。有不同的解决方案可用,我尝试过将 optional 设置为 true 并设置 @NotFound 但没有任何效果。 SQL 以下为 hql 创建

select  business0_.business_id as col_0_0_,  business0_.createdBy as col_1_0_,  business0_.modified_by as col_5_0_,  business0_.biz_type_id as col_9_0_ from  _business  business0_, _users  users1_, _users  users4_,  _biz_type  biztype7_  where  business0_.createdBy= users1_.web_user_id and  business0_.modified_by= users4_.web_user_id and  business0_.biz_type_id= biztype7_.biz_type_id  order by  business0_.business_name

它正在使用 "and" 进行联接。如果我通过使用 hql 添加以下内容来显式添加连接,则结果保持不变。

left join business.modifiedBy  modifiedBy  

有什么解决办法吗?

当您在查询中使用 business.modifiedBy 时,它会隐式转换为 inner join,这就是您得不到任何结果的原因。把它改成这个,它应该可以工作

String hql = "select new com.ba.Business(business.businessId, business.slUsersByCreatedBy.userId, mb.userId, business.bizType.bizTypeId) from  com.ba.Business business left join business.modifiedBy mb order by business.businessName";