3

私のドメイン モデルでは、次の Classes.A 'UserProfile' には 1 つの 'SecurityPrincipal' があります。

class SecurityPrincipal{
 private String loginId;
 private String password;
 private Date registeredData;
 private int status;
}



class UserProfile {

private String name;
private String company;
private SecurityPrincipa principal

}

「UserProfile」オブジェクトのソート結果を取得したいのですが、単純なプロパティに対してはうまく機能します.Like

DetachedCriteria criteria=DetachedCriteria.forClass(UserProfile.class);     

criteria.addOrder(Order.asc("name");

しかし、次のような内部 Bean (SecurityPrincipal インスタンス) のプロパティにアクセスしようとすると

criteria.addOrder(Order.asc("principal.status");

休止状態でエラーが発生します:

原因: org.hibernate.QueryException: プロパティを解決できませんでした: securityPrincipal.status of: com.bigg.ibmd.usermanagement.model.UserProfile at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44) at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:59) at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

プロパティのプロパティで結果を並べ替えるにはどうすればよいですか?

ありがとう

4

2 に答える 2

4

これを試して:

DetachedCriteria criteria=DetachedCriteria.forClass(UserProfile.class);         
criteria.createAlias("principal", "p");
criteria.addOrder(Order.asc("p.name"));

私はそれを試したことはなく、それが最も良い方法であると確信していませんが、うまくいくはずです.

于 2009-12-18T06:21:48.600 に答える
0

複数のフィールドでフィルタリングするには、@OrderBy アノテーションを使用する必要があります。例えば:

@OrderBy("id, name, anything") プライベート SecurityPrincipa プリンシパル ...

JPA Criteria api 2.0 は、コレクションに対して OUTER JOIN を生成することに注意してください。テーブルに 1 対 1 ではなく 1 対多のリレーションがある場合、複数の結果がフェッチされます。

@OrderBy("体重、身長") プライベート コレクション userVitalStatsCollection;

重複を避けるには、データベース ビューを使用すると便利です。

于 2014-05-16T05:32:27.597 に答える