Hibernate:为一个类混合xml和基于注释的映射

时间:2016-02-12 06:14:18

标签: java spring hibernate jpa annotations

我必须使用一些元数据修改(更好地说增强)已经存在的实体类。 calss的元数据是通过注释定义的。但是现在我想在实体类中添加一些UserType定义(特定于hibernate)。如果我通过我的hibernate-mapping-file中的注释重复所有元数据集,但是有没有办法只添加我的特定方面而不覆盖基于注释的东西?提前谢谢。

1 个答案:

答案 0 :(得分:1)

哦,抱歉。我当然可以:

@Entity
public class Thing implements Serializable {

    @Id
    private ContractNumber contractNumber;

    @Column
    private String columnViaAnnotation;

    public ContractNumber getContractNumber() {
        return contractNumber;
    }

    public void setContractNumber(ContractNumber contractNumber) {
        this.contractNumber = contractNumber;
    }

    public String getColumnViaAnnotation() {
        return columnViaAnnotation;
    }

    public void setColumnViaAnnotation(String columnViaAnnotation) {
        this.columnViaAnnotation = columnViaAnnotation;
    }
}

我的映射:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-mapping>
    <class name="com.mypackage.Thing">
        <id name="contractNumber" type="myType" column="contractNumber" />
    </class>
    <typedef class="com.mypackage.HibernateContractNumberConverter" name="myType" />
</hibernate-mapping>

自定义类型效果非常好。数据类型ContractNumber将转换为int,反之亦然。但不幸的是,专栏列#ViaAnnotation&#39;因为我的映射文件中没有提到它而消失了。我希望Hibernate足够聪明,可以合并两种配置(基于xml和注释)。有没有机会这样做?