如何映射java.util.Optional类型的字段?我尝试了@Converter
注释和AttributeConverter
,
@Converter
public class OptionalConverter<T> implements AttributeConverter<Optional<T>, T>{
@Override
public T convertToDatabaseColumn(Optional<T> attribute) {
return attribute.orElse(null);
}
@Override
public Optional<T> convertToEntityAttribute(T dbData) {
return Optional.of(dbData);
}
}
但它没有按计划进行。 Hibernate根本不支持任何指针或Optional
?感谢。
答案 0 :(得分:0)
您可以尝试通过以下方式强制使用转换器
// Entity field
@Convert(converter = OptionalConverter.class)
private Optional<Foo> foo;
,或者如果这样做没有帮助,则为特定的Optional
类型实现转换器:
@Converter(autoApply = false)
public class OptionalFooConverter
extends OptionalConverter<Foo>
implements AttributeConverter<Optional<Foo>, Foo> { // this line is necessary when using EclipseLink
@Override
public Foo convertToDatabaseColumn(Optional<Foo> attribute) {
return attribute.orElse(null);
}
@Override
public Optional<Foo> convertToEntityAttribute(Foo dbData) {
return Optional.of(dbData);
}
}
// Entity field
@Convert(converter = OptionalFooConverter.class)
private Optional<Foo> foo;
由于实体类中的Optional
字段还有其他缺点(例如,@NotNull
可能无法按预期工作),因此您也可以将字段本身设置为常规的可为空值(非{{ 1}})输入并在getter和setter中进行转换。