休眠可选关系不显示数据
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";
我正在使用带 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";