0

私はまだ Hibernate を使い始めたばかりで、継承した Web サイトで Hibernate を使用しようとしています。残念ながら、これは db スキーマが必ずしも意味をなさない場合があることを意味します。

そうは言っても、Criteria API を使用して次の HQL クエリを作成しようとしています。

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId

上記の HQL ステートメントは、私が望んでいる TableB のみを選択して返す SQL を生成します。ただし、以下に示す Critera API ステートメントを使用すると、生成された SQL ステートメントは TableB と TableA のフィールドを選択します。

DataProvider.Session
    .CreateCriteria<TableB>()
    .Add(Expression.Eq("Id", id))
    .CreateCriteria("TableA")
    .Add(Expression.Eq("UserId", userId))
    .UniqueResult<TableB>()
    ;

完璧な世界では、db スキーマを更新してより意味のあるものにすることができますが、残念ながらできません。これに関する任意の助けをいただければ幸いです。

4

1 に答える 1

2

あなたの質問はTableAとTableBに関連付けられたクラスを示していないので、クラスはTableAとTableBであり、TableBにはTableAというプロパティがあると想定します。

DataProvider.Session
    .CreateCriteria<TableB>()
    .Add(Expression.Eq("Id", id))
    .CreateAlias("TableA", "a")
    .Add(Expression.Eq("a.UserId", userId))
    .UniqueResult<TableB>();
于 2010-01-25T12:55:51.527 に答える