我不想談論爲什麼一種方法比其他方法更好。我從註釋開始,並不能像現在這樣簡單。當嘗試使用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);
}
感謝您的建議。我沒有persistence.xml,並快速添加一個沒有幫助(我猜想別的東西:-)另外我沒有使用Spring,所以不能直接使用你的建議;不管你的代碼如何,我檢查了在純Hibernate中如何做到這一點。我添加了適用於我的文章的代碼。 –