Java Hibernate实体类映射不工作
出于某种原因,除非我使用Java Hibernate实体类映射不工作,java,hibernate,Java,Hibernate,出于某种原因,除非我使用addAnnotatedClass(CategoryEntity.class)方法,否则我的类映射不起作用。我已经花了很多时间,但仍然不知道这里有什么问题,你能告诉我我做错了什么吗 hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configur
addAnnotatedClass(CategoryEntity.class)
方法,否则我的类映射不起作用。我已经花了很多时间,但仍然不知道这里有什么问题,你能告诉我我做错了什么吗
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL81Dialect</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/dvdrental</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="entity.CategoryEntity"/>
</session-factory>
</hibernate-configuration>
Main.java
public class Main {
private static SessionFactory sessionFactory;
public static void main(String[] args) {
System.out.println("Hibernate tutorial");
try {
Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.out.println("Failed to create session factory");
throw new ExceptionInInitializerError(e);
}
listAllCategories();
sessionFactory.close();
}
private static void listAllCategories() {
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
List<CategoryEntity> categories = session.createCriteria(CategoryEntity.class).list();
for (CategoryEntity category : categories) {
System.out.println("Category id = " + category.getCategoryId()
+ ", name = " + category.getName() + ", last updated = " + category.getLastUpdate());
}
tx.commit();
} catch (HibernateException e) {
if (tx != null) { tx.rollback(); }
e.printStackTrace();
} finally {
session.close();
}
}
}
公共类主{
私有静态SessionFactory SessionFactory;
公共静态void main(字符串[]args){
System.out.println(“Hibernate教程”);
试一试{
Configuration=new Configuration().configure(HibernateUtil.class.getResource(“/hibernate.cfg.xml”);
StandardServiceRegistryBuilder serviceRegistryBuilder=新的StandardServiceRegistryBuilder();
applySettings(configuration.getProperties());
ServiceRegistry ServiceRegistry=serviceRegistryBuilder.build();
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
}捕获(例外e){
System.out.println(“未能创建会话工厂”);
抛出新异常初始化错误(e);
}
listAllCategories();
sessionFactory.close();
}
私有静态void listAllCategories(){
Session Session=sessionFactory.openSession();
事务tx=null;
试一试{
tx=session.beginTransaction();
列表类别=session.createCriteria(CategoryEntity.class).List();
对于(类别实体类别:类别){
System.out.println(“Category id=“+Category.getCategoryId())
+“,name=“+category.getName()+”,上次更新=“+category.getLastUpdate());
}
tx.commit();
}捕获(休眠异常e){
如果(tx!=null){tx.rollback();}
e、 printStackTrace();
}最后{
session.close();
}
}
}
问题是我从接受的答案中得到的代码 改成
sessionFactory = new Configuration().configure().buildSessionFactory();
现在一切都正常了我假设您使用的是包,所以请使用完全限定的类名。@Thomas您能指出我应该在哪里这样做吗?对meHmm来说一切都很好,我不能确切地告诉您该做什么,因为我们使用Hibernate作为JPA提供程序,因此在persistence.xml中有我们的配置。但是,请看这里:-这似乎符合您的问题描述。您也可以看这里:其中包含以下行:
sessionFactory=newannotationconfiguration().configure().buildSessionFactory()代码>-这可能是您的问题,也就是说,您创建会话的方式不能使会话理解/解释批注。最后要检查的是HibernateUtil.class.getResource(“/hibernate.cfg.xml”)
是否返回正确的文件。这没有意义。现在你正在避免加载你的hibernate设置(除非你在其他地方设置它们),你假装它能工作?佩雷,这很好,只需要一行会话工厂配置,它立刻解决了我们的问题我在这里,我使用的是完全相同的代码。改成这一行,现在一切都正常了。我发誓,春天/冬眠没有任何意义。
Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
sessionFactory = new Configuration().configure().buildSessionFactory();