是否可以在Hibernate中的同一项目中同时使用注释和hbm.xml文件?

时间:2011-11-29 13:35:17

标签: java hibernate java-ee

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

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

有超过一百个POJO以这种方式配置,原始开发团队不愿意切换到注释。

与此同时,我们需要使用更多POJO来扩展项目,我们愿意使用Hibernate注释进行配置,并希望继续使用Hibernate - 如果可能的话 - 并且不要切换到JPA。

是否可以同时为某些POJO和其他POJO使用.hbm.xml个配置文件的组合?

3 个答案:

答案 0 :(得分:13)

是的,你可以。 Documentation

  

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

虽然有一些检查点:

  

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

您可以找到更多信息here

答案 1 :(得分:7)

Manu给出了答案,但是如果要切换到注释,并且想要将这些hbm.xml转换为注释。请继续。您可以使用将使用现有表中的注释生成pojo类的工具。即使使用这些工具,你也不必改变其他代码就像以前一样生成pojos。即不要更改属性名称。我曾经在同一个项目上工作,我使用了Ant脚本。

答案 2 :(得分:0)

我认为这篇文章很棒但是通过实际的代码示例它会更好。我已经尝试了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以解析< mapping resource =" your_entity.hbm.xml" />和< mapping class =" my.entity.objclass" />

免责声明:我尝试使用旧的Hibernate ver 3.2.1并且运行正常。