Spring ROO GWT通过引用选择

Spring ROO GWT通过引用选择,gwt,persistence,spring-roo,Gwt,Persistence,Spring Roo,我用以下实体创建了一个GWT Spring ROO项目:Facture和ItemFacture ItemFacture包含对Facture的引用 @RooJavaBean @RooToString public class ItemFacture { @ManyToOne private Facture facture; ... 这是制作代码: @RooJavaBean @RooToString @RooEntity public class Facture { p

我用以下实体创建了一个GWT Spring ROO项目:Facture和ItemFacture

ItemFacture包含对Facture的引用

@RooJavaBean
@RooToString
public class ItemFacture {

    @ManyToOne
    private Facture facture;
...
这是制作代码:

@RooJavaBean
@RooToString
@RooEntity
public class Facture {

    private String nom;
    private String type;
}
一切都很顺利,直到我想创建一个自定义查找程序来选择包含特定制作的所有ItemFacture:

@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();
}
@SuppressWarnings(“未选中”)
公共静态列表findByFacture(Facture-Facture){
Query q=entityManager().createQuery(“从ItemFacture中选择o作为o,其中o.facture=:facture”);
q、 设置参数(“断裂”,断裂);
返回q.getResultList();
}
当我尝试执行此查找程序时,它会给我以下错误:

服务器错误:com.test.ItemFacture中不存在字段“facture”,或者该字段不是持久字段;嵌套异常为javax.persistence.PersistenceException:com.test.ItemFacture中不存在字段“facture”,或者该字段不是持久的

我创建了一些自定义查找程序,除了这一个,它们都工作得很好

我尝试将@Persistent添加到字段中,并将@PersistenceCapable(identityType=identityType.APPLICATION)添加到Facture中,但仍然不起作用


有人知道问题出在哪里吗?

我想这不起作用的原因是ItemFacture类不是@Entity,所以JPA不知道这个字段存在。使用@RooEntity roo注释ItemFacture类时,会生成一个ItemFactures\u roo\u Entity.aj(默认情况下,STS会在包资源管理器中隐藏这些文件),它将ItemFacture类上的@Entity注释与其他一些东西连接起来,使其成为ActiveRecord(http://martinfowler.com/eaaCatalog/activeRecord.html)在AppEngine中,使用被引用对象的ID进行引用。所以 事件,如果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();
}
@SuppressWarnings(“未选中”)
公共静态列表findByFacture(Facture-Facture){
Query q=entityManager().createQuery(“从ItemFacture中选择o作为o,其中o.factureId=:facture”);
q、 setParameter(“facture”,facture.getId());
返回q.getResultList();
}

也希望看到Facture类中的代码。我添加了Facture的代码。但我尝试了其他几个实体,但没有任何效果。我在ItemFacture中添加了“@Entity”,并从ItemFacture_Roo_Entity.aj中删除了“declare@type:ItemFacture:@Entity;”,但不幸的是,它仍然不起作用。