3

私たちのシステムでは、データベースは次のようになります

1つのエージェンシーには多くのブローカーがあり、1つのブローカーには多くのユーザーがいて、1つのユーザーには多くの注文があります。

Hibernate基準を使用して、指定された証券会社のユーザーのすべての注文を検索しようとしています。プレーンSQLでは、これは非常に簡単です。基準APIでこれを行うことはできますか?条件APIは、クリックアンドフィルタータイプのuiを使用する場合に特に効果的であることがわかりました。これは、順序付けされていない制限のリストを作成して、それらを基準に追加できるためです。

現在、これは機能しません

final Session session = (Session) entityManager.getDelegate();
    final Brokerage brokerage = userAdmin.loadBrokerage(brokerageId);
    @SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
    final List<UserOrder> userOrders = session
            .createCriteria(UserOrder.class)
            .add(Restrictions.eq("user.brokerage", brokerage))
            .list();

「原因:org.hibernate.QueryException:プロパティを解決できませんでした:user.brokerage of:com.printlogix.rp.server.domain.UserOrder:」というメッセージが表示されます。

「object.parentobject.property」のようなパラメータ名をRestrictions.eqに渡すことはできますか?

4

1 に答える 1

6

HQLのようにアソシエーションをチェーンすることはできません。代わりに、サブ基準またはエイリアスを定義する必要があります。

Criteria c = session.createCriteria(UserOrder.class);
Criteria userCriteria = c.createCriteria("user");
userCriteria.add(Restrictions.eq("brokerage", brokerage));

また

Criteria c = session.createCriteria(UserOrder.class);
c.createAlias("user", "user");
c.add(Restrictions.eq("user.brokerage", brokerage));

これは、CriteriaのjavadocおよびHibernateリファレンスドキュメントに記載されています。

于 2011-08-08T21:06:41.817 に答える