Spring ROO GWT Выбрать по ссылке - PullRequest
       33

Spring ROO GWT Выбрать по ссылке

0 голосов
/ 29 сентября 2011

Я создал проект GWT Spring ROO со следующими объектами: Facture и ItemFacture.

ItemFacture содержит ссылку на Фактуру.

@RooJavaBean
@RooToString
public class ItemFacture {

    @ManyToOne
    private Facture facture;
...

Это код для фактуры:

@RooJavaBean
@RooToString
@RooEntity
public class Facture {

    private String nom;
    private String type;
}

и все шло хорошо, пока я не захотел создать собственный искатель, который выбирает все ItemFactures, которые содержат определенный фактор:

@SuppressWarnings("unchecked")
public static List<ItemFacture> findByFacture(Facture facture) {

    Query q = entityManager().createQuery("SELECT o FROM ItemFacture AS o WHERE o.facture = :facture");
    q.setParameter("facture", facture);

    return q.getResultList();
}

Когда я пытаюсь запустить этот искатель, он выдает мне эту ошибку:

Ошибка сервера: поле "facture" не существует в com.test.ItemFacture или не является постоянным; Вложенное исключение - javax.persistence.PersistenceException: поле «фактура» не существует в com.test.ItemFacture или не является постоянным

Я создал несколько пользовательских видоискателей, и каждый из них работал отлично, кроме этого.

Я пытался добавить @Persistent в поле и @PersistenceCapable (identityType = IdentityType.APPLICATION) в Facture, но он все еще не работает.

Кто-нибудь знает в чем проблема?

Ответы [ 2 ]

0 голосов
/ 16 октября 2011

В AppEngine ссылки делаются с идентификатором ссылочного объекта. Так Событие, если ItemFacture содержит и атрибут facture, фактически сохраняется как factureId.

Итак, метод записи такой:

@SuppressWarnings("unchecked")
public static List<ItemFacture> findByFacture(Facture facture) {

    Query q = entityManager().createQuery("SELECT o FROM ItemFacture AS o WHERE o.factureId = :facture");
    q.setParameter("facture", facture.getId());

    return q.getResultList();
}
0 голосов
/ 30 сентября 2011

Я думаю, причина того, что это не работает, в том, что класс ItemFacture не является @Entity, поэтому JPA не знает, существует ли это поле.с аннотированием класса ItemFacture с помощью @RooEntity roo генерирует ItemFactures_Roo_Entity.aj (STS скрывает эти файлы в проводнике пакетов по умолчанию), который связывает аннотацию @Entity в вашем классе ItemFacture вместе с некоторыми другими вещами, делая его ActiveRecord (http://martinfowler.com/eaaCatalog/activeRecord.html)

...