Java 我可以在hibernate中为单个实体混合hbm.xml映射和jpa注释映射吗?

Java 我可以在hibernate中为单个实体混合hbm.xml映射和jpa注释映射吗?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一些java模型类,它们当前使用JPA注释映射到数据库表。其中一个是这样的: @Table(name = "RECOG_APPLICATION_STAGING") @SequenceGenerator(name = "seqRecogApplicationStaging", allocationSize = 0, sequenceName = "SEQ_RECOG_APPLICATION_STAGING") @Entity public class RecogApplicationStagi

我有一些java模型类,它们当前使用JPA注释映射到数据库表。其中一个是这样的:

@Table(name = "RECOG_APPLICATION_STAGING")
@SequenceGenerator(name = "seqRecogApplicationStaging", allocationSize = 0, sequenceName = "SEQ_RECOG_APPLICATION_STAGING")
@Entity
public class RecogApplicationStaging extends AuditedEntity implements Serializable {

@Id
@Column(name = "APPLICATION_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqRecogApplicationStaging")
private Long id;


@OneToOne(mappedBy = "applicationStaging", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private RecogPropertyStaging recogPropertyStaging;

@OneToOne(mappedBy = "applicationStaging", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private ContactInformation contactInformation;

@OneToOne(mappedBy = "applicationStaging", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private RecogEligibilityStaging recogEligibilityStaging;

@OneToOne(mappedBy = "applicationStaging", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private RecogSubmitApplStaging recogSubmitApplStaging;

@OneToMany(mappedBy = "applicationStaging", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Sort(type = SortType.NATURAL)
private SortedSet<GenerateSignature> generateSignature = new TreeSet<>();

@Column(name = "READY_FOR_DOWNLOAD_YN")
private boolean readyForDownloadYn;

@Column(name = "RECOG_APPL_PROGRESS_CODE")
private String recogApplProgressCode;

@Column(name = "DOWNLOAD_TRACKING_NUMBER")
private String downloadTrackingNumber;

@Column(name = "PROPERTY_ID")
private Long propertyId;

//getters and setters
@Table(name=“记录应用程序”
@SequenceGenerator(name=“seqRecogApplicationStaging”,allocationSize=0,sequenceName=“SEQ\u RECOG\u APPLICATION\u STAGING”)
@实体
公共类RecogApplicationStaging扩展AuditedEntity实现可序列化{
@身份证
@列(name=“APPLICATION\u ID”)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“SeqRecogaApplication标记”)
私人长id;
@OneTONE(mappedBy=“applicationStaging”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私有RecogPropertyStaging RecogPropertyStaging;
@OneTONE(mappedBy=“applicationStaging”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人联系信息;
@OneTONE(mappedBy=“applicationStaging”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人可恢复性登台可恢复性登台;
@OneTONE(mappedBy=“applicationStaging”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人记录submitapplstaging RecogSubmitApplStaging;
@OneToMany(mappedBy=“applicationStaging”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@排序(type=SortType.NATURAL)
私有SortedSet generateSignature=新树集();
@列(name=“准备下载”)
私有布尔readyForDownloadYn;
@列(name=“记录应用进度代码”)
私有字符串recogApplProgressCode;
@列(name=“下载\跟踪\编号”)
私有字符串下载TrackingNumber;
@列(name=“PROPERTY\u ID”)
私人长期房地产;
//接球手和接球手
}

我的任务是将这些java模型映射到具有相同表的辅助模式。因此,我考虑将映射移动到hbm.xml文件,然后合并新模式的新映射。我想知道是否可以将表名和实体名移到hbm.xml文件中,并保持java类中的文件映射不变。大概是这样的:

<hibernate-mapping package="....dao.model.recognition" default-access="field">

<class
    name="....dao.model.recognition.RecogApplicationStaging"
    table="RECOG_APPLICATION_STAGING"
    entity-name="primaryRecogApplicationStaging">
    <id name="id" column="APPLICATION_ID">
        <generator class="native">
            <param name="sequence_name">SEQ_RECOG_APPLICATION_STAGING</param>
        </generator>
    </id>

</class>

<class
        name="....dao.model.recognition.RecogApplicationStaging"
        table="RECOG_APPLICATION_STAGING"
        entity-name="secondaryRecogApplicationStaging">
    <id name="id" column="APPLICATION_ID">
        <generator class="native">
            <param name="sequence_name">SEQ_RECOG_APPLICATION_STAGING</param>
        </generator>
    </id>
</class>

顺序记录应用程序暂存
顺序记录应用程序暂存


对于这个问题,它是一个很好的实现还是有更好的方法?我只是想避免将所有jpa映射转换为hbm.xml映射

这是混合xml和注释的典型用法。。。当您需要覆盖某些数据存储的硬编码注释时。。。然而,您需要考虑一些规则(覆盖规则)。。。根据“Pro JPA 2”:

以下算法可被视为获取
持久化单元的元数据:
1.处理注释。实体、映射超类和嵌入对象的集合
(我们将此集合称为E)是通过查找@Entity、@MappedSuperclass和
@可嵌入注释。集合E中所有类中的类和方法注释
处理,生成的元数据存储在集合C中。任何缺少的元数据
未在注释中显式指定的保留为空。
2.添加XML中定义的类。查找所有实体、映射的超类和
在映射文件中定义的嵌入对象,并将它们添加到E。如果我们发现
其中一个类已经存在于E中,我们为类级元数据应用覆盖规则
我们在映射文件中找到的。根据需要在C中添加或调整类级元数据
最重要的规则。
3.添加XML中定义的属性映射。对于E中的每个类,请查看字段或
属性,并尝试将方法元数据添加到C
属性已存在,请为属性级映射应用覆盖规则
元数据。
4.应用默认值。根据作用域规则和位置确定所有默认值
可能已经定义了默认值(有关默认规则的说明,请参见以下内容)。这个
将指定尚未填写的类、属性映射和其他设置
值并输入C。


我建议您阅读本书第13章的前10页来了解这一点。

JPA使用的是
orm.xml
,而不是特定于Hibernate的遗留文件。