1

Log、Employee、Agency の 3 つのエンティティがあります。

Employee への多対 1 関連付けでログに記録する

Agency に多対 1 の関連付けを持つ従業員

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

if (StringUtils.isNotBlank(c.getName())) {
      criteria.createAlias("employee", "e").add(Restrictions.ilike("e.name", "%" + c.getName() + "%"));
    }
if (StringUtils.isNotBlank(c.getAgency())) {
      criteria.createAlias("employee", "e").createAlias("agency", "a").add(Restrictions.ilike("e.a.name", "%" + c.getAgency() + "%"));
        }

上記は従業員名には機能しますが、代理店名には機能しません。

以下のエラーが表示されます。

Exception: org.hibernate.QueryException: could not resolve property: agency of: com.example.Log

私が見つけたすべての例は、1 レベル下にしかありません。誰かが下に移動する方法を教えてくれるリソースを教えてもらえますか?

4

2 に答える 2

3

次のコードを試してください

DetachedCriteria criteria = DetachedCriteria.forClass(Log.class);
criteria.createAlias("employee", "e");

if (StringUtils.isNotBlank(c.getName())) {
    criteria.add(Restrictions.ilike("e.name", c.getName(), MatchMode.ANYWHERE));
}

if (StringUtils.isNotBlank(c.getAgency())) {
    criteria.createAlias("e.agency", "a"); //  <===========
    criteria.add(Restrictions.ilike("a.name", c.getAgency(), MatchMode.ANYWHERE));
}
于 2011-11-10T01:33:06.057 に答える
3

2番目のものは次のように動作するはずです:

criteria.createAlias("employee", "e").createAlias("e.agency","a")
           .add(Restrictions.ilike("a.name", "%" + c.getAgency() + "%"));
于 2011-11-10T01:52:16.550 に答える