java - 当 AnnotationConfiguration 已弃用时,为什么我需要 AnnotationConfiguration 实例?

标签 java hibernate

使用 Hibernate 4.2.6 和 Spring 3.1.1

我有一个与此类似的类(class)

@Entity
@Table( name = "MY_TABLE" )
public class MyTable{ ... }

然后我的 hibernate.cfg.xml 文件中有以下内容

<mapping class="com.mycompany.myapp.persistence.domain.MyTable"/>

当我运行 JUnit 测试并获取 session 并查询表时,出现以下错误:

Initial SessionFactory creation failed.org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.mycompany.myapp.persistence.domain.MyTable"/>

我不明白为什么根据我所读到的内容,AnnotationConfiguration 已被弃用,并且功能已移至配置中。

为了获得 session ,我正在这样做

Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();

但无法获取 session 并抛出此错误。

最佳答案

现在似乎可以工作了。解决方案有两个:

首先,这段代码是正确的:

a) 映射类保留在 hibernate.cfg.xml 中

b) 创建一个 HibernateUtil 类

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            Configuration configuration = new Configuration();
            configuration.configure();
            ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
            return configuration.buildSessionFactory(serviceRegistry);
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

c) 创建模型类

d) 然后在测试中,像这样在 setup() 中实例化 sessionFactory

sessionFactory = HibernateUtil.getSessionFactory();

e) 然后像这样查询数据库

Session session = sessionFactory.openSession();
session.beginTransaction();
List<TableName> result = session.createQuery("from table").list();
session.getTransaction().commit();
session.close();

第二,在这个 AnnotatedConfiguration 类被弃用之前,我使用 JBoss 4.2 作为我的目标运行时,它使用 Hibernate 3.4.2。不将 JBoss 作为运行时会导致使用 Hibernate 4.2.6(通过 Maven 导入)并且不会导致此错误。应该更加注意,因为 Hibernate 在设置时会打印其版本! :-)

关于java - 当 AnnotationConfiguration 已弃用时,为什么我需要 AnnotationConfiguration 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038907/

相关文章:

java - 将对象 toString() 写入文件,在 Java 中整齐地格式化

java - 如何获取 doxygen 文档中的\s\p?

java - 用对象包裹集合属性

java - 配置 id 序列 hibernate 生成器

java - 针对 MySQL 在 Hibernate 实体中建模 UUID

java - 有人可以解释为什么 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)

java - 删除recycleView中的sqlite条目

java - 我的世界锻造不加载纹理

java - 新实体和现有实体的级联插入

java - 为什么打印 [[Ljava.lang.Object;@12f29d9, [Ljava.lang.Object;@1648f32]