当前位置: 首页 > 面试题库 >

有没有一种方法可以防止在允许其他值通过时保留空值?

傅琦
2023-03-14
问题内容

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

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

是否有注释,模式或其他工具可用于在setter中自动执行空检查,或告诉JPA不要保留空值???

我可以检查每个实体中的每个设置器,然后添加,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;
  }
 }
}

问题答案:

Hibernate验证程序(以及的任何实现javax.validation)具有@NotNull注释,如果带注释的属性为null,则该注释将不允许实体持久化。我不确定hibernate- validatorEclipseLink是否可以使用,但是也应该有EclipseLink的实现javax.validation

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



 类似资料:
  • 问题内容: 现在我正在做: 有没有更有效的方法直接从Find(或其他搜索功能)中获取带有用户名的slice,而没有struct和range循环? 问题答案: MongoDB的结果始终是文档列表。因此,如果要获取值列表,则必须像以前一样手动将其转换。 使用自定义类型(源自) 另外请注意,如果您要创建自己的类型(从派生),则可以覆盖其取消编组逻辑,并仅从文档中“提取” 。 它看起来像这样: 然后将用户

  • 简而言之:有没有一种方法可以在gcc或CLANG中不推荐命名空间? 长: 现在我想知道是否有更好的方法来做类似的事情,比如将名称空间util的使用标记为不推荐使用。 我们使用GCC4.7.3作为生产编译器,但是针对clang进行构建和测试,以尝试捕捉gcc的细节;因此,在这些编译器上工作的东西会有所帮助。

  • 我试图在我的应用程序中使用视图寻呼机实现照片查看器。我能够让系统用户界面消失(导航和状态栏)在一个单一的触摸。我遇到的唯一问题是,每次我使状态栏消失并重新出现时,我在视图寻呼机上的布局开始抖动或跳跃。 我的实现的可视化 我想要实现的是什么 我已经试着按照这个stack over flow post中的建议设置系统ui标志。但它仍然给了我“神经质”的布局反应。 下面的代码是我用来隐藏/显示状态栏的:

  • 问题内容: 文档说调用sys.exit()会引发SystemExit异常,该异常可以在外部级别捕获。在这种情况下,我想确定无疑地从测试用例中退出,但是unittest模块会捕获SystemExit并阻止退出。这通常很好,但是我要处理的特定情况是我们的测试框架检测到已配置为指向非测试数据库的情况。在这种情况下,我要退出并阻止运行任何进一步的测试。当然,由于unittest捕获了SystemExit并

  • 问题内容: 我想在我的sails.js应用程序中用猫鼬代替吃水线。我正在寻找执行此操作的正确方法,但是我没有在文档中看到操作方法。谁能解释该怎么做? 问题答案: 通过.sailsrc定义替代 您可以通过在项目根目录中定义的配置覆盖来实现。基本上,您必须阻止当前标记为“ 钩子” 的整个“水线”初始化。在.sailsrc中: 您还必须禁用该挂钩- 这取决于挂钩。源中的相关行:v0.10,v0.9.8。