我想为JPA实体映射设置一些实体规则。非常简单的例子是如果有一个实体
@Entity
@Table(name = "my_table")
public class {
@Id
private Integer id;
private boolean flagged;
....
}
我的标记值是db中的String,标记为Yes / null / No.如果值为null / yes,我希望将标记的值设置为true。否则是假的。有没有办法在JPA实体的bean映射上定义此自定义规则。这是一个简单的例子,也需要将它用于复杂的规则。感谢您的帮助。
由于
答案 0 :(得分:1)
您可以编写自己的转换器。使用以下代码作为起点并适应您的用例
@Entity
@Table(name = "my_table")
public class Myclass{
@Convert(converter=BoolToString.class)
private Boolean flagged;
...
}
转换器为:
@Converter
public class BoolToString implements AttributeConverter<Boolean,
String> {
@Override
public String convertToDatabaseColumn(Boolean value) {
if (value == null) return "-";
else return value ? "Y" : "N";
}
@Override
public Boolean convertToEntityAttribute(String value) {
if (value.equals("-") return null;
else if (value.equals("Y")) return true;
else if (value.equals("N")) return false;
else throw new IllegalStateException("Invalid boolean character: " +
value);
}