2013-10-22 103 views
0

我有一個實體:爲什麼我的實體表映射在JPA Hibernate中?

@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] 

這是爲什麼?我錯了什麼,在代碼中應該更改什麼?謝謝!

回答

0

這兩個SELECT工作得很好:

  1. 與映射的名稱

    查詢Q = em.createQuery( 「選擇Tg爲target_group TG WHERE tg.stableId =:stableId」);

  2. 與全限定名:

    查詢Q = em.createQuery( 「選擇Tg爲com.my_organisation.full.path.to.TargetGroup TG WHERE tg.stableId =:stableId」);

1

使用此批註@Entity(name = "target_group")要重命名的默認值(類的名稱),用來指在查詢中的實體(look here as a reference)。 像往常一樣,只有在存在歧義時才需要類的完全限定名稱。