2014-02-21 45 views
0

我不想談論爲什麼一種方法比其他方法更好。我從註釋開始,並不能像現在這樣簡單。當嘗試使用XML配置它工作。但爲什麼?如何調試這種問題?無法管理將休眠映射轉換爲註釋

我有一個非常簡單的現有表「tRegion」與2個字符串列 - 「代碼」和「地區」其中Code字段是唯一鍵。

我創建了一個類:

@Entity 
@Table(name = "tRegion") 
public class Region { 
    @Id String Code; 
    @Column String Region; 

    public void setCode(String code) { 
     Code = code; 
    } 
    public void setRegion(String region) { 
     Region = region; 
    } 
    public String getCode() { 
     return Code; 
    } 
    public String getRegion() { 
     return Region; 
    } 
} 

如果我運行代碼:

List<Region> result = (List<Region>) session.createQuery("from Region").list(); 

我得到的錯誤:

INFO: HHH000397: Using ASTQueryTranslatorFactory org.hibernate.hql.internal.ast.QuerySyntaxException: Region is not mapped [from Region] 

某處有問題,我的註解...但是,如果我添加一個XML映射文件:

<hibernate-mapping package="com.mypackage"> 
<class name="Region" table="tRegion"> 
    <id name="Code" /> 
    <property name="Region"/> 
</class> 
</hibernate-mapping> 

它的工作原理。對我來說,映射看起來與我的註釋相同。什麼可能是錯的?我使用Hibernate 4.3.1庫,如果它可以有所作爲。

編輯/解決方案:

大家似乎對解決方案達成一致修改的persistence.xml,但我在Java中實體管理的初學者,所以我根本不知道我應該使用一個。那麼,在閱讀建議之後,我甚至試圖添加它(我啓用了JPA方面並將類元素添加到persistence.xml),但我想我必須做其他事情才能使其使用JPA(試圖添加@PersistanceContext註釋沒有成功)

我也不熱衷於添加另一個配置文件。事實上,我部署應用程序的方式阻止了我修改任何配置文件,並且讓您不用於最終修改配置的配置文件是毫無意義的。

最後工作的方法是簡單地將.addAnnotatedClass(com.mypackage.Region.class)添加到實例化SessionFactory的例程中。

public static SessionFactory createSessionFactory() { 
      Configuration configuration = new Configuration(); 
      configuration 
        .addAnnotatedClass(com.mypackage.Region.class) 
        .configure(); 
      ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
      return configuration.buildSessionFactory(serviceRegistry); 
    } 

回答

0

嘗試增加

<class>xx.xx.Region<class> 

要將persitence。XML

0

對於映射實體冬眠,除了與@Entity註解它們,你必須做下列之一:

所有實體類添加到您的persistence.xml手動

<class>com.mypackage.Region</class> 

或者說,在我看來, ,最佳的選擇,把你所有的實體在單獨的罐子並把它添加到persistence.xml

<jar-file>lib\your-entities.jar</jar-file> 

注ŧ帽子jar文件路徑是相對於你的最終打包/部署的應用程序

0

你如何配置Hibernate映射哪些實體?

我能夠在這裏添加您所在地區的實體,讓您的代碼的工作(使用HibernateConfiguration類):

@Bean 
    public AnnotationSessionFactoryBean sessionFactoryBean() { 
... 
     AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean(); 
     bean.setAnnotatedClasses(new Class[]{Region.class}); 
... 
     return bean; 
    } 

你也可以在你的persistence.xml類中定義你的實體是這樣的:

<class>com.mypackage.Region</class> 

有關配置休眠的各種方法的文檔可以找到here

+0

感謝您的建議。我沒有persistence.xml,並快速添加一個沒有幫助(我猜想別的東西:-)另外我沒有使用Spring,所以不能直接使用你的建議;不管你的代碼如何,我檢查了在純Hibernate中如何做到這一點。我添加了適用於我的文章的代碼。 –