我有一个字段:Entity类的“Country”是可选的。该国家/地区是指包含具有国家/地区属性的ID列表的表格。
为了在我的表中包含没有给出Country的行,我使用了:
.....createAlias("country_Id", "Co", Criteria.LEFT_JOIN);
我更希望为Entity对象的country字段返回一个空的Country对象而不是null。
对于初学者来说,我的方法是获取所有表格行,有/无国家/地区的行是否正确? 或者有更好的方法吗?
最后你会建议创建一个拦截器来将null转换为空国家对象吗?否则,我将在处理返回的搜索结果的代码中处理它,方法是添加IF(null)语句。
答案 0 :(得分:1)
如果字段为空,您可以尝试COALESCE
函数返回新的国家/地区:
SELECT COALESCE(Co, new Country()) ...
。但您可能必须将主实体绑定到Country实体,而不是使用country_Id
。
[编辑]
它也可以与CriteriaBuilder一起使用:
cb.coalesce(root.get("Co"), new Country())
/!\将对所有结果行使用相同的默认Country实例