如果找不到实体,则为JPA默认值

时间:2015-09-07 10:45:21

标签: java hibernate jpa annotations many-to-one

如果找不到实体(仅当未找到实体 - EntityNotFound异常),是否有办法设置一些(默认)值?如果DB中存在空值,则该字段必须为null。 例如,我有一个实体First与实体关系第二:

class First {
   ...
   @ManyToOne @JoinColumn(name="second", nullable=true)
   @NotFound(action = NotFoundAction.IGNORE)
   Second second;
   ...
}

如果列"秒"在DB(表" First")中为null,则first.second必须为null。如果列"第二"在DB中(表"第一")是5(第二个id = 5)并且表中没有行#34;第二个"如果id == 5,那么firts.second应该是一些默认值(实体),例如实体Second,id = 1或new second(params);

2 个答案:

答案 0 :(得分:1)

我希望您通过一对get / set方法访问您的字段。只需在getter中创建空值检查逻辑:

public Second getRelated(){
    if( second == null )
        return defaultValue;
}

请同时查看此答案https://stackoverflow.com/a/757330/149818

答案 1 :(得分:1)

class First {
   ...
   @ManyToOne @JoinColumn(name="second", nullable=true)
   @NotFound(action = NotFoundAction.IGNORE)
   Second second;

   @Column(name = "second", insertable = false, updatable = false)
   private Long secondId;

   public Second getSecond(){
      if (second == null && secondId != null) {
        return defaultSecond;
      }
      return second;
   }
}

如果您想将second字段本身更改为默认值,则可以添加@PostLoad回调:

public Second getSecond(){
   return second;
}

@PostLoad
private void postLoad() {
   if (second == null && secondId != null) {
      this.second = defaultSecond;
   }
}