代码之家  ›  专栏  ›  技术社区  ›  Freiheit

有没有办法防止空值被持久化,同时允许其他值通过?

  •  5
  • Freiheit  · 技术社区  · 15 年前

    我有一个现有的JPA(EclipseLink)项目,其中所需的行为是,如果在一个实体的字段中给定一个空值,则不应保留该空值。

    用例是,我们可以从外部源获得对这些实体的几个部分更新。这些来源可能会给我们一个空值,这并不意味着“使这个字段无效”,而是意味着“我没有这个值”。

    是否有注释、模式或其他工具可用于在setter中自动执行空检查或告诉jpa不要持久化空值?????

    我可以检查每个实体中的每个setter并添加 if(val != null) { //set the value } 但这是乏味和重复的。

    例如,我们有:

    
    @Entity
    @Table(name = "my_table")
    public class MyObject {
     @Column
     private String myColumn;
    
     public String getMyColumn() {
      return this.myColumn;
     }
    
     public void setMyColumn(String val) {
      this.myColumn = val;
     }
    }
    

    我想要一些自动帮助的东西,比如:

    
    @Entity
    @Table(name = "my_table")
    public class MyObject {
     @Column
     @DontPersistIfNull
     private String myColumn;
    
     public String getMyColumn() {
      return this.myColumn;
     }
    
     public void setMyColumn(String val) {
      this.myColumn = val;
     }
    }
    

    或者:

    
    @Entity
    @Table(name = "my_table")
    public class MyObject {
     @Column
     private String myColumn;
    
     public String getMyColumn() {
      return this.myColumn;
     }
    
     public void setMyColumn(String val) {
      //AUTOGENERATED NULL CHECK
      if(val != null) {
       this.myColumn = val;
      }
     }
    }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Bozho    15 年前

    Hibernate validator (以及 javax.validation @NotNull 注释,如果注释属性为空,则不允许持久化实体。我不确定 hibernate-validator 将与日食线一起工作,但是应该有一个 javax.验证 也为了日食线。

    但是如果你想阻止设置空值,那么修改设置值的图层,而不是实体本身。

        2
  •  2
  •   Mihir Mathuria    15 年前

    不确定这是不是你要找的答案,但是你检查过 Null Object Design Pattern