0

次のSybaseクエリがあります。

select *
  from dbo.translation_style_sheet t1
 where t1.create_date = (select max(t2.create_date) 
                           from dbo.translation_style_sheet t2
                          where t1.file_name = t2.file_name);

それを休止状態の基準クエリに変換しようとしていますが、理解できませんでした。これを処理するには DetachedCriteria を使用する必要があると想定していますが、その操作方法がわかりません。

これは私がこれまでに持っているものです。

DetachedCriteria maxCreateDate = DetachedCriteria.forClass(TranslationStyleSheet.class, "translationStyleSheet2")
    .setProjection( Property.forName("createDate").max() )
    .add( Property.forName("translationStyleSheet2.fileName").eqProperty("translationStyleSheet.fileName") );

List<TranslationStyleSheet> translationStyleSheets = this.session.createCriteria(TranslationStyleSheet.class, "translationStyleSheet")
            .add( Property.forName("createDate").eq(maxCreateDate))
            .list();

次の例外が発生しています。

org.hibernate.exception.GenericJDBCException
could not execute query

SQL
    select this_.translation_style_sheet_id as translat1_20_0_, this_.create_date as create2_20_0_, this_.description as descript3_20_0_, this_.file_content as file4_20_0_, this_.file_extension as file5_20_0_, this_.file_name as file6_20_0_, this_.file_size as file7_20_0_, this_.style_sheet_content as style8_20_0_, this_.style_sheet_type as style9_20_0_ from translation_style_sheet this_ where this_.create_date = (select max(translationStyleSheet2_.create_date) as y0_ from translation_style_sheet translationStyleSheet2_ where translationStyleSheet2_.file_name=this_.file_name)
SQLState
    ZZZZZ

私が間違っていることを誰かが知っていますか?

アップデート

max(translationStyleSheet2_.create_date) as y0_ as でエラーが発生しているようです。SQLステートメントで as y0_ を削除すると、クエリを実行できますが、休止状態の基準でこれを修復する方法がわかりません。

4

1 に答える 1

1

したがって、これを基準クエリとして機能させることはできませんでしたが、HQL クエリとして機能させることには成功しました。

HQL ソリューション

this.session.createQuery("from TranslationStyleSheet this "
                + "where this.createDate = (select max(translationStyleSheet2.createDate) "
                + "from TranslationStyleSheet translationStyleSheet2 "
                + "where translationStyleSheet2.fileName=this.fileName)")
                .list();

ただし、クエリを条件クエリとして機能させることにまだ興味があります。

于 2012-10-29T18:00:51.757 に答える