当前位置: 首页 > 知识库问答 >
问题:

Hibernate:从映射迁移到注释-是否可以混合hbm和注释?

丁震博
2023-03-14

我目前正在将我的项目从Hibernate HBM映射迁移到注释。就我应付小班而言,一切都很容易。但我有相同的大型类,我尝试为这个类混合映射和注释。我了解到,通过使用hibernate属性“hibernate.mapping.priority”并将其设置为“class,hbm”而不是“hbm,class”,这是可能的。(请参阅:在Hibernate中:可以为实体混合注释和XML配置吗?)

例如,我有以下文档类:

java prettyprint-override">@Entity
@Table(name="DOCUMENT")
public class Document  {
   @Column(name="DESCRIPTION")
   private String description;
}

以及以下文件。hbm。xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    
<hibernate-mapping>
  <class name="Document" table="DOCUMENT" >
    <id name="id" column="DOCUMENT_ID" type="long" />
  </class>
</hibernate-mapping>

在我的冬眠中。cfg。我放的xml文件:

<property name="hibernate.mapping.precedence">class, hbm</property>
<mapping class="Document"/>
<mapping resource="Document.hbm.xml"/>

我的问题是:-如果我把“class,hbm”作为优先级,那么我在类文档中只有注释-如果我把“hbm,class”作为优先级,那么我在hbm资源中只有映射

如果有一种方法可以同时拥有注释和HBM映射,有人知道吗?

谢谢

卡姆兰

PS:我使用:Hibernate 4.1.4和Spring Framework 3.1.1

共有1个答案

谢高峯
2023-03-14

你不能把它们混用在同一个班级。在hibernate注释第1.2节的末尾:

您可以混合使用带注释的持久类和经典的hbm。cfg。具有相同SessionFactory的xml声明。但是,您不能多次声明一个类(无论是带注释的还是通过hbm.xml)。您也不能在实体层次结构中混合配置策略(hbm与注释)。

为了简化从hbm文件到注释的迁移过程,配置机制检测注释和hbm文件之间的映射重复。然后,HBM文件在类到类的基础上优先于带注释的元数据。您可以使用hibernate更改优先级。映射。优先级属性。默认值为hbm,class,将其更改为class,当发生冲突时,hbm将优先考虑带注释的类而不是hbm文件。

使用注释和hbm文件是两次声明一个类。因此,在类对类的基础上,一个将优先于另一个(类对类的基础意味着对于每个类,只使用hbm文件或注释)。

 类似资料:
  • 问题内容: 因此,可以混合使用两种配置而不是仅使用其中一种配置吗? 我想要做的就是保留所有配置(通过注释)并通过XML读取表。 可能吗? 非常感谢。 编辑:hbm.xml文件将如何?我有这个: 而且不要编译dtd。 问题答案: hibernate文档(最新) 请注意,您可以将旧的hbm.xml使用和注释方法混合使用。资源元素可以是hbm文件或EJB3 XML部署描述符。区别对于您的配置过程是透明的

  • 我想让hibernate生成一些带有外键的表等等。我将给出我希望hibernate生成的查询的一个示例: 所以这个查询应该由hibernate通过注释生成。与此对应的类是: 有关中的应映射到的内容的示例(中的每个助记符在中只有一个值): 正如您所看到的,我在文档的帮助下做了一些尝试,但是我不能让Hibernate生成外键。如果有人能告诉我这个类需要的注释和值,那就太好了,这样我就可以自己为其他类做

  • 问题内容: 我有一个大型的非Java EE,基于JSF的Web应用程序项目。我们的系统是分层的(在源代码中):有一个数据模型包,它是DAO包的基础。我们仅在DAO包中使用Hibernate的XML配置映射。我们确实不想将数据模型与注释混淆在一起,但是我们并没有特别地将其绑定到Hibernate(除非映射非常复杂)。 我强烈考虑向Java EE迈进,并将DAO对象构建为EJB。但是由于我们不愿放弃H

  • 问题内容: 几天前,我开始与Hibernate合作时,我只是想知道:假设您正在从头开始一个项目。您是否将使用基于注释的映射或Hibernate映射文件来生成数据库模式。 据我了解,Hibernate映射文件提供了一些注解所没有的功能(至少不是完全等效的功能)。但是,我仍然感觉到,如今,使用Hibernate的项目宁愿基于注释而不是Hibernate映射文件。 有没有人选择过注解上的映射文件,如果是

  • 我有这些桌子: 由该类表示: 原因:org.hibernate.mappingException:无法确定:java.util.map的类型,位于表:product,列:[org.hibernate.mapping.simplevale.getType(simplevale.java:349)位于org.hibernate.mapping.simplevale.isvalid(simplevale

  • 我一直使用hibernate。cfg。配置Hibernate的xml。由于各种原因,我需要将所有配置转移到Java,并且我在映射实体方面存在问题。 以前在XML中,我的映射是这样的: 一切都是注释驱动的,所以我不需要指定其他任何东西。 现在,我使用Hibernate的配置来配置一切。类,如何添加映射?我尝试了配置。addClass(Test.class)但这会引发一个错误,即file 但是在第一次