java 对象是否存在_java – hibernate,检查对象是否存在以及null值

我正在使用hibernate将记录(即对象)保存到数据库.在保存对象之前,我想验证数据库是否已包含此对象. (主键只是一个增量键,不能用于此.)

我在运行时创建一个HQL语句来检查具有这些属性的记录的存在性(即column1-3).

生成的查询应如下所示:

from myTable where column1 is null and column2 = :column2 and column3 = :column3'

因为有时列可以包含空值,所以我检查属性的值,如果它是NULL值,那么我在此查询中使用a而不是a =(例如,column1在上面的语句中是:column1).

因为我开始意识到我正在做很多工作来实现至关重要的事情,我开始怀疑自己是否走在正确的轨道上.有没有更简单的方法来检查物体的存在?

编辑:在我意识到column1是:column1在以下情况下不起作用时,我略微改写了我的问题:column1参数设置为null.显然,唯一似乎按预期工作的语法是column1为null.因此,在搜索空值时似乎无法使用通配符.但这并没有改变我的问题的主要方面:我应该在运行时检查所有这些东西吗?

解决方法:

这是我到目前为止找到的最佳方式.

我更喜欢将我的过滤器放在地图中.键指的是属性(即map.put(“column1”,Integer.valueOf(1))).

有一个Restritions.eqOrIsNull方法,简化了对Criterion对象的转换.以下方法将整个Map转换为List< Criterion>.

public List mapToCriterion(Map params)

{

if (params == null) return null;

// convert the parameter map to a list of criterion

List criterionList = new ArrayList<>(params.size());

for (Map.Entry entry : params.entrySet())

criterionList.add(Restrictions.eqOrIsNull(entry.getKey(), entry.getValue()));

return criterionList;

}

稍后,我使用List< Criterion>构建Criteria对象.

Criteria criteria = session.createCriteria(clazz);

if (criterionList != null)

{

for(Criterion criterion : criterionList)

criteria.add(criterion);

}

// get the full list

@SuppressWarnings("unchecked")

List objectList = criteria.list();

我的总体印象仍然是这里缺少一些便利方法(例如Criteria#addAll(List< Criterion>)本来不错).

标签:java,hibernate,h2

来源: https://codeday.me/bug/20190708/1399675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值