gpt4 book ai didi

java - hibernate hbm 文件中的 @Convert 相当于什么?

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:48 25 4
gpt4 key购买 nike

我写了一个属性转换器。我想在一个实体中应用它。到目前为止,我采用的是纯 XML 方法。

我在 hbm 符号中找不到与 @Convert 等价的符号。

一个例子将不胜感激。

当我搜索这个时,可以理解的是,Google 会返回很多关于“将 hbm 文件自动转换为实体,反之亦然”的工具/方法的结果。

编辑:现在我怀疑 hbm 文件中是否有一个选项,因为这是 JPA 注释。

@Convert 的文档说:

The Convert annotation is used to specify the conversion of a Basic field or property. It is not necessary to use the Basic annotation or corresponding XML element to specify the basic type.

我不太清楚这是什么意思。在这种情况下混合注释和 XML 是可行的方法吗?

我已经试过了:

public class Person {
//this is enum
private Ethnicity ethnicity;
//.....
}

public enum Ethnicity{
INDIAN("IND"),
PERSIAN("PER")
//...constructors and value field.

public String value(){
return this.value;
}

public Ethnicity fromValue(String value){
//logic for conversion
}
}

转换器:

@Converter
public class EthnicityConverter implements AttributeConverter<Ethnicity,String> {

@Override
public Ethnicity convertToEntityAttribute(String attribute) {
if ( attribute == null ) {
return null;
}

return Ethnicity.fromValue( attribute );
}

@Override
public String convertToDatabaseColumn(Ethnicity dbData) {
if ( dbData == null ) {
return null;
}

return dbData.value();
}
}

HBM 文件:

//....other columns
<property name="ethnicity">
<column name="ethnicity"/>
<type name="EthnicityConverter"/>
</property>
//....other columns

编辑:更正转换器代码。

最佳答案

Sarvana 的回答很接近——您实际上使用了 type XML 属性。但是,type 用于命名 Hibernate Type。然而,有一个命名约定,取而代之的是,一个 AttributeConverter - 只需将前缀 converted:: 应用于您的 AttributeConverter FQN。例如,

 <property name="ethnicity">
<column name="ethnicity"/>
<type name="converted::EthnicityConverter"/>
</property>

另一种选择是自动应用转换器:

@Converter( autoApply=true)
public class EthnicityConverter implements AttributeConverter<Ethnicity,String> {
...
}

鉴于上面的转换器,只要 Hibernate 知道它,Hibernate 就会将其应用于 Ethnicity 类型的任何属性。

HTH

关于java - hibernate hbm 文件中的 @Convert 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38719133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com