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();
}
}
上面的问题影响了我一天,连六一都过不好,哈哈!!!
希望可以帮到你********************************************************