JPA实体的自定义映射规则

时间:2018-03-26 20:02:29

标签: java hibernate jpa spring-data spring-data-jpa

我想为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映射上定义此自定义规则。这是一个简单的例子,也需要将它用于复杂的规则。感谢您的帮助。

由于

1 个答案:

答案 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);
 }

Hibernate

Java