0

こんにちは、単純な 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"は受け入れられないようです。制限をどのように記述すればよいですか?

4

1 に答える 1

0

Hibernate がa+bをエンティティのプロパティとして解決しようとしている可能性があり、

org.hibernate.QueryException: プロパティを解決できませんでした: a+b

考えられる解決策はいくつかあります。

1つ目: 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);

プロパティ名の代わりに列名を使用する必要があるという問題が 1 つあります。

2番目: 式:

@Formulaアノテーションを使用してエンティティに仮想列を追加します。

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

それを標準プロパティとして使用します。

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

3 番目のカスタム基準:

頻繁に使用している場合は、org.hibernate.criterion.Criterionを実装してカスタム基準を作成することを検討してください。

于 2013-08-13T11:58:06.697 に答える