【问题标题】:Is it possible to use both annotations and hbm.xml files in the same project in Hibernate?是否可以在 Hibernate 的同一个项目中同时使用注解和 hbm.xml 文件?
【发布时间】:2012-01-08 20:14:40
【问题描述】:

是否必须在使用注解和休眠配置文件之间做出严格的选择,还是可以在同一个项目中同时使用这两种方式?

我们有一个使用 Hibernate 3.2.5 和配置了 .hbm.xml 文件的 POJO 完成的大型项目。该项目使用 Hibernate SessionManager Factory,而不是基于 JTA 的 EntityManager factory。

以这种方式配置的 POJO 有一百多个,而最初的开发团队不愿意切换到注解。

同时,我们需要使用更多 POJO 扩展项目,我们愿意使用 Hibernate 注释配置这些 POJO,并希望继续使用 Hibernate——如果可能的话——而不是切换到 JPA。

是否可以同时为某些 POJO 使用 .hbm.xml 配置文件和为其他 POJO 使用注释?

【问题讨论】:

  • 考虑到诸如 NetBeans 之类的工具以及在许多情况下甚至 Eclipse 等工具的缺陷,即使我正确地编码和配置了东西,我也经常会出错。因此,对于一些甚至许多 Java 专家都说“不知道,从未尝试过”的事情,我不会在不确定是我的错误还是 IDE 或仅仅因为它不能简单地在 Java 中完成的情况下浪费我的时间试错/休眠。

标签: java hibernate jakarta-ee


【解决方案1】:

可以。Documentation

请注意,您可以混合使用传统的 hbm.xml 和注释方法。资源元素可以是 hbm 文件或 EJB3 XML 部署描述符。

不过有几个检查点:

但是,您不能多次声明一个类(无论是通过注释还是通过 hbm.xml)。您也不能在实体层次结构中混合配置策略(hbm 与注释)。

您可以找到更多信息here

【讨论】:

    【解决方案2】:

    Manu 已经给出了答案,但是如果您要切换到注解并且想要将那些 hbm.xml 转换为注解。请继续。您可以使用工具来生成带有来自现有表的注释的 pojo 类。即使使用这些工具,您也不必更改其他代码,只需像以前一样生成 pojo。即不要更改属性名称。我从事过类似的项目,为此我使用了 Ant 脚本。

    【讨论】:

      【解决方案3】:

      我认为这篇文章很棒,但如果有实际的代码示例会更好。我已经尝试过 ManuPK ref,这就是它的工作原理。
      我的实际参考在这里: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/ch01.html#setup-configuration

      //typical way to use cfg.xml
      Configuration cfg = new Configuration();
      SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory();
      Session s = f.openSession();
      s.persist(new EntityObj());
      
      //to use both annotation & cfg.xml mappings, use AnnotationConfiguration instead of Configuration
      AnnotationConfiguration cfg = new AnnotationConfiguration();
      SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory();
      Session s = f.openSession();
      s.persist(new EntityObj());
      

      AnnotationConfiguration 将照常读取 cfg.xml 以解析

      免责声明:我尝试使用旧的 Hibernate 版本 3.2.1,它运行良好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 2021-03-19
        • 1970-01-01
        相关资源
        最近更新 更多