是否必须在使用注释和hibernate配置文件之间做出严格的选择,或者是否可以在同一个项目中同时使用这两种方式?
我们使用Hibernate 3.2.5和配置了.hbm.xml
文件的POJO完成了一个大型项目。该项目使用Hibernate SessionManager
Factory而不是基于JTA的EntityManager
工厂。
有超过一百个POJO以这种方式配置,原始开发团队不愿意切换到注释。
与此同时,我们需要使用更多POJO来扩展项目,我们愿意使用Hibernate注释进行配置,并希望继续使用Hibernate - 如果可能的话 - 并且不要切换到JPA。
是否可以同时为某些POJO和其他POJO使用.hbm.xml
个配置文件的组合?
答案 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并且运行正常。