org.hibernate.MappingException: Unknown entity
這句報錯的原因是映射沒有成功,查看Bean和Hibernate的主配置文件和映射配置文件如下:
import javax.persistence.Column; import javax.persistence.Entity;//這裏要注意導入的包,不是import org.hibernate.annotations.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="news_inf") public class News { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private Integer id; @Column(name="title") private String title; @Column(name="content") private String content; /*此處省略getter和setter方法 */ //構造方法=====》在MyEclips中是有快捷鍵的,可直接按ALT+S就可以了,其中包含了有參和無參構造方法, //getter和setter方法,以及hashCode()和equals()方法等等······· public News() { } public News(String title, String content) { super(); this.title = title; this.content = content; } //重寫hashCode()和equals()方法 @Override public int hashCode() { //此處省略 } @Override public boolean equals(Object obj) { //此處省略 }
}
hibernate.cfg.xml的配置和正常的一樣,只有一個地方不同,
有的人喜歡這樣進行映射:<mapping resource="org/crazyit/app/domain/News.hbm.xml"/>
我的方式是這種:<mapping class="org.crazyit.app.domain.News"/>
第一種方式,需要另外進行配置*.hbm.xml文件,第二種方式採種註解形式,減少了代碼量。
NewsManager.java
public class NewsManager
{
public static void main(String[] args)
throws Exception
{
// 實例化Configuration,
Configuration conf = new Configuration()
// 不帶參數的configure()方法默認加載hibernate.cfg.xml文件,
// 如果傳入abc.xml作爲參數,則不再加載hibernate.cfg.xml,改爲加載abc.xml
.configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(conf.getProperties()).build();
// 以Configuration實例創建SessionFactory實例
SessionFactory sf = conf.buildSessionFactory(serviceRegistry);
// 創建Session
Session sess = sf.openSession();
// 開始事務
Transaction tx = sess.beginTransaction();
// 創建消息對象
News n = new News("你好嗎","我很好");
// 保存消息
sess.save(n);
// 提交事務
tx.commit();
// 關閉Session
sess.close();
sf.close();
}
}
上面的代碼看其實確實是對的,但是就是報錯,最終發現是版本問題 ,版本問題,版本問題《重要的事情說3遍》
上面的是在Hibernate3.x及Hibernate4.x,而我使用的是Hibernate5.x,所以代碼有變化。
所以我改成了這樣就可以了:
public class NewsManager {
public static void main(String[] args) {
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.configure().build();
SessionFactory sf = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();
News n = new News("你好嗎","我很好");
sess.save(n);
tx.commit();
sess.close();
}
}
上面的問題影響了我一天,連六一都過不好,哈哈!!!
希望可以幫到你********************************************************