【问题标题】:Java criteria restrictions sum of columns lower than valueJava标准限制列的总和低于值
【发布时间】:2012-08-12 17:37:44
【问题描述】:

您好,我有一个关于将简单 SQL 语句转换为 java hibernate 限制的问题。

SQL:

SELECT a + b FROM col WHERE a + b < 10

当我尝试将其转换为我得到的条件时:

Criteria criteria = createCriteria();
criteria.createAlias("col","col").add(Restrictions.lt("a+b",10));

但似乎不接受字符串"a+b"。我必须如何写我的限制?

【问题讨论】:

  • 应该可以工作.. 你使用的是哪个数据库?
  • 我有自己的数据库。但是当我执行上面的脚本时,我得到了这个异常:线程“main”中的异常 org.hibernate.QueryException: could not resolve property: a+b of: col
  • 我认为 Joe 是在问您使用的是哪种类型的数据库服务器。 MySQL? PostgreSQL?甲骨文? MS SQLServer?
  • 抱歉,我正在使用 postgresql。

标签: java sql criteria restrictions


【解决方案1】:

这可能是因为 Hibernate 试图将 a+b 解析为您的实体的属性,而您得到了

org.hibernate.QueryException: 无法解析属性:a+b

可能的解决方案很少:

第一个:sql限制:

//Hibernate 4.x
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10), org.hibernate.type.StandardBasicTypes.INTEGER);

// Hibernate 3.x
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10),       org.hibernate.Hibernate.INTEGER);

有一个问题是您必须使用列名而不是属性名。

第二个:公式:

使用 @Formula 注释向您的实体添加一个虚拟列:

@org.hibernate.annotations.Formula("a + b")
private int aSumB;

并将其用作标准属性:

criteria.add(Restrictions.lt("aSumB", Integer.valueOf(10));

第三个自定义标准:

如果您经常使用它,请考虑通过实现 org.hibernate.criterion.Criterion

来创建自定义条件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多