2013-01-04 37 views
0

我有一個只包含我的模型的註釋類的JAR。然後加載JAR的應用程序。休眠JPA查詢只適用於命名空間

在應用程序中我有persistence.xml中:

<jar-file> my jar </jar-file>

,並在屬性:

<property name="hibernate.archive.autodetection" value="class" />

工程。被檢測的單位和此查詢工作正常:

List<Event> events = em.createQuery(
"from com.my.namespace.model.Event", Event.class).getResultList(); 

但是我絕對需要在查詢的命名空間......如果我這樣做:

List<Event> events = em.createQuery("from Event", Event.class).getResultList(); 

然後我得到這個異常:

Event is not mapped [from Event] 

什麼是更令人沮喪的是,我給JPA類,Event.class因爲我的電話的第二個參數。 Java代碼導入正確的包。

如何獲得JPAQL/HQL「進口」合適的包一看就知道實體,而無需顯式地鍵入命名空間?

更新:這裏是Event.java如果它幫助..它是微不足道,因爲它得到:

package com.my.namespace.model; 

import javax.persistence.*; 

@Entity(name="events") 
@SequenceGenerator(name="events_id_seq", sequenceName="events_id_seq") 
public class Event { 

    @Id @Column(name="id") @GeneratedValue(generator="events_id_seq") 
    private Long mId; 

    @Column(name="title") 
    private String mTitle; 

    public Long getId() { 
     return mId; 
    } 

    public String getTitle() { 
     return mTitle; 
    } 

    public void setTitle(String title) { 
     mTitle = title; 
    } 
} 
+0

您可以發佈Event.java,你怎麼映射表和實體? – Subin

回答

2

@Entity(name="events")是罪魁禍首

它必須是

  @Entity 
      @Table(name="events") 

如果您將事件記錄爲數據庫表名稱。否則在您的查詢中使用events而不是Event

+0

感謝您告訴我我打算鍵入的內容,將@Table註釋分開。有點震驚,因爲這與hibernate-core很好地工作。 –

2

由於您的實體名稱是「events」(來自@Entity(name =「events」)),您應該從「events」而不是「event」中進行選擇。

List<Event> events = em.createQuery("from events", Event.class).getResultList(); 

因此應該工作

+0

不,你應該在HQL/JPAQL中鍵入的是類名,除此之外,我寫它與命名空間一起工作。無論如何,我嘗試了你的建議,並且它不起作用,有和沒有命名空間。 –

+0

是來自事件還是來自事件? – Subin

+0

@Subin:來自活動 –