0

我有一个实体:

@Entity(name = "target_group")
public class TargetGroup extends AbstractEntity {
    private String name;
    private String description;
    @ManyToMany(fetch = FetchType.LAZY)
    private List<Customer> customers = new ArrayList<>();
    getter.setter...
}

而且我有一个代码,以获取有关具有stableId(在抽象类中)的组的列表:

public TargetGroup getTargetGroupByStableId(String stableId) {
    TargetGroup tg = null;
    try {
        Query q = em.createQuery("SELECT tg FROM TargetGroup tg WHERE tg.stableId = :stableId");
        q.setParameter("stableId", stableId);
        tg = (TargetGroup) q.getSingleResult();
        logger.debug("TargetGroup reached: "+tg.generalInfo());
    } catch(Exception e) {
        logger.error("Error in getting TargetGroup by stableId:"+stableId,e);
        throw e;
    }
    return tg;
}

我收到了这个错误:

SEVERE: Error in getting TargetGroup by stableId:51a7b93f-a342-44ec-9849-cd1688102f65
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: TargetGroup is not mapped [SELECT tg FROM TargetGroup tg WHERE tg.stableId = :stableId]

这是为什么?我做错了什么,我应该在我的代码中更改什么?谢谢!

4

2 回答 2

1

使用此注释@Entity(name = "target_group"),您正在重命名用于在查询中引用实体的默认值(类的名称)(在此处作为参考)。像往常一样,只有在存在歧义时才需要类的完全限定名称。

于 2013-10-22T16:09:04.627 回答
0

这两个 SELECT 工作正常:

  1. 使用映射的名称

    查询 q = em.createQuery("SELECT tg FROM target_group tg WHERE tg.stableId = :stableId");

  2. 具有完整的限定名称:

    查询 q = em.createQuery("SELECT tg FROM com.my_organisation.full.path.to.TargetGroup tg WHERE tg.stableId = :stableId");

于 2013-10-22T12:26:26.927 回答