Hibernate: Query By Example, включающий отношения один-ко-многим

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

Мои сценарии следующие:

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

Я надеялся установить критерий запроса для примера экземпляра 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 ответ

 org.hibernate.QueryException: could not resolve property: _com of: B

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

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

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

Имя свойства совпадает с A и B и совпадает с заданным вами.

Другие вопросы по тегам