gpt4 book ai didi

java - hibernate ,检查对象是否存在和空值

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:59 25 4
gpt4 key购买 nike

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

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

生成的查询应如下所示:

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

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

因为我开始意识到我正在做很多工作来实现一些相对重要的事情,所以我开始怀疑我是否走在正确的轨道上。 有没有更简单的方法来检查对象是否存在?

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

最佳答案

这是目前为止我找到的最好的方法。

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

有一个Restritions.eqOrIsNull简化转换为 Criterion 的方法对象。 以下方法转换整个 MapList<Criterion> .

public List<Criterion> mapToCriterion(Map<String, Object> params)
{
if (params == null) return null;

// convert the parameter map to a list of criterion
List<Criterion> criterionList = new ArrayList<>(params.size());
for (Map.Entry<String, Object> 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<T> objectList = criteria.list();

我的总体印象仍然是这里缺少几个方便的方法(例如 Criteria#addAll(List<Criterion>) 会很好)。

关于java - hibernate ,检查对象是否存在和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com