Hibernate: Query By Example, включающий отношения один ко многим - PullRequest
1 голос
/ 02 ноября 2011

Я недавно начал играть с примером компонента Criteria API и столкнулся со странной проблемой - возникает исключение org.hibernate.QueryException при попытке выполнить поиск.

Мои сценариивыглядит следующим образом:

У меня есть класс A, который в качестве одного из своих свойств имеет набор экземпляров класса B (Set listOfBs).Это сопоставляется как отношение «один ко многим» в A.

Я надеялся установить критерий запроса на примерном экземпляре B, например, указав все B со значением свойства «somevalue», изатем примените этот критерий, чтобы найти все A, которые имеют такой B в своем наборе.Это код, который я использую (или надеюсь):

    Criteria aCrit = session.createCriteria(A.class);

    A aExampleInstance = new A();
    Example aExampleCriteria = Example.create(aExampleInstance );

    Criteria bCrit = atCrit.createCriteria("listOfBs");
    B bExampleInstance = new B();
    bExampleInstance .setProperty("somevalue");
    bCrit.add(Example.create(bExampleInstance ));

    List<A> results = aCrit.add(aExampleCriteria).list();

Я использую отображение XML, и A отображает свое отношение к B следующим образом (A.hbm.xml):

   <set name="listOfBs" table="B" inverse="false" cascade="all" lazy="true">
       <key column="A_ID" not-null="true"/>
       <one-to-many class="B"/>
   </set>

Я понимаю, что это может быть неправильный подход - любые лучшие предложения приветствуются.В любом случае проблема в том, что я получаю исключение:

org.hibernate.QueryException: не удалось разрешить свойство: _com of: B

Я искал ипонять, что говорит мне исключение.Однако ни в одном из моих классов такое имя свойства не объявлено - мне может показаться, что это может быть частью любого инструментария, который Hibernate использует под капотом, чтобы постоянство выглядело прозрачным.

Мне любопытно, если этоэто известная проблема, есть ли обходной путь, который использовали люди, или, возможно, решение в более новой версии?Я использую Hibernate 3.6.6.

Буду признателен за любые советы и опыт.

Спасибо!

1 Ответ

1 голос
/ 14 ноября 2011
 org.hibernate.QueryException: could not resolve property: _com of: B

исключение говорит о том, что не удалось найти свойство _com в b

это означает, что в следующем коде ваш код ошибочен.

  B bExampleInstance = new B();
  bExampleInstance .setProperty("somevalue"); 

- это имя свойства такое же, как у A и B, и то же, которое вы задали.

...