Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate实体类映射不工作_Java_Hibernate - Fatal编程技术网

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();