异常信息:
Exception in thread "main" org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.red.bean.Book"/>
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1524)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1479)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1458)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1432)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1352)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1338)
at com.red.test.TestStudent.main(TestStudent.java:40)
问题分析:
<hibernate-configuration>
<session-factory>
...
<!--注册所有ORM映射文件-->
<mapping resource="Student.hbm.xml" />
<mapping class="com.red.bean.Book"/>
</session-factory>
</hibernate-configuration>
4)测试类
public class TestStudent {
public static void main(String[] args)
{
...
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(st);
session.getTransaction().commit();
session.close();
sf.close();
}
}
在hibernate.cfg.xml配置文件中,带有<mapping class="com.red.bean.Book"/>,则说明映射类时,采用了Annotation方式。在初始化Configuation时,应使用AnnoationConfiguration,否则代码如下:
Configuration cfg = new AnnoationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
因为AnnotationConfiguration继承Configuration,所以实例化Configuration可以识别并解析<mapping class="..."/>的Annotation映射配置,但是反过来则会出错,如果hibernate.cfg.xml文件中有<mapping class="..."/>配置,必须使用AnnotationConfiguration实例化。