Hibernate Envers 审计 @Embedded 内有基本类型 throws 无法在获取时将字段设置为空值
Hibernate Envers audit @Embedded with basic types inside throws cannot set field to null value on fetch
我已经审计了实体,该实体具有 class 的外键(我不想审计):
@Entity
@Audited
public class CitaAgenda {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "reconocimiento_id")
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Reconocimiento reconocimiento;
...
}
此外,Reconocimiento
是一个嵌入了 属性:
的实体
@Entity
public class Reconocimiento {
@Embedded
private Enfermeria enfermeria;
...
}
而可嵌入的class如下:
@Embeddable
public class Enfermeria {
private boolean diabetes;
...
}
现在,当我从修订中获取数据并获取 CitaAgenda 时,我得到一个
"Can not set boolean field ...Enfermeria.diabetes to null value".
我认为发生的事情是 Hibernate 试图用 NULL 初始化 enfermeria 属性 of Reconocimiento 因为它相信所有字段都是 NULL,因为存储在 _AUD
table 中的 Reconocimiento 的唯一字段是 ID(因为其他字段未被审计)。但这不是真的,因为如果我审核其他字段,diabetes 将是 false 而不是 NULL。
我无法将 diabetes 设置为布尔值。还有其他解决方案吗?提前致谢。
如果您可以向 Enfemeria 添加额外的注释,那么您可以使用自定义转换器对其进行标记:
嵌入式class
@Convert(converter=MyBooleanConverter.class)
private boolean diabetes;
转换器class
@Converter
public class MyBooleanConverter implements AttributeConverter<Boolean, Integer>{
@Override
public String convertToDatabaseColumn(Boolean value) {
if (Boolean.TRUE.equals(value)) {
return Integer.valueOf(1);
} else {
return Integer.valueOf(0);
}
}
@Override
public Boolean convertToEntityAttribute(Integer value) {
if(value != null and value.equals(1){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
当然你可能需要考虑使用String而不是Integer来进行转换。这取决于数据库中的基础列数据类型。
我已经审计了实体,该实体具有 class 的外键(我不想审计):
@Entity
@Audited
public class CitaAgenda {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "reconocimiento_id")
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Reconocimiento reconocimiento;
...
}
此外,Reconocimiento
是一个嵌入了 属性:
@Entity
public class Reconocimiento {
@Embedded
private Enfermeria enfermeria;
...
}
而可嵌入的class如下:
@Embeddable
public class Enfermeria {
private boolean diabetes;
...
}
现在,当我从修订中获取数据并获取 CitaAgenda 时,我得到一个
"Can not set boolean field ...Enfermeria.diabetes to null value".
我认为发生的事情是 Hibernate 试图用 NULL 初始化 enfermeria 属性 of Reconocimiento 因为它相信所有字段都是 NULL,因为存储在 _AUD
table 中的 Reconocimiento 的唯一字段是 ID(因为其他字段未被审计)。但这不是真的,因为如果我审核其他字段,diabetes 将是 false 而不是 NULL。
我无法将 diabetes 设置为布尔值。还有其他解决方案吗?提前致谢。
如果您可以向 Enfemeria 添加额外的注释,那么您可以使用自定义转换器对其进行标记:
嵌入式class
@Convert(converter=MyBooleanConverter.class)
private boolean diabetes;
转换器class
@Converter
public class MyBooleanConverter implements AttributeConverter<Boolean, Integer>{
@Override
public String convertToDatabaseColumn(Boolean value) {
if (Boolean.TRUE.equals(value)) {
return Integer.valueOf(1);
} else {
return Integer.valueOf(0);
}
}
@Override
public Boolean convertToEntityAttribute(Integer value) {
if(value != null and value.equals(1){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
当然你可能需要考虑使用String而不是Integer来进行转换。这取决于数据库中的基础列数据类型。