Есть ли способ предотвратить сохранение нулевых значений при одновременном пропуске других? - PullRequest
5 голосов
/ 18 января 2010

У меня есть существующий проект JPA (EclipseLink), в котором требуемое поведение заключается в том, что если задано нулевое значение в поле для сущности, это нулевое значение не должно сохраняться.

Вариант использования заключается в том, что мы можем получить несколько частичных обновлений этих объектов из внешних источников. Эти источники могут дать нам нулевое значение, которое не означает «обнулить это поле», а означает «у меня нет этого значения».

Есть ли аннотация, шаблон или другой инструмент, который можно использовать для автоматизации проверки нуля в установщике ИЛИ сказать 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;
  }
 }
}

Ответы [ 2 ]

2 голосов
/ 18 января 2010

Валидатор Hibernate (и любая реализация javax.validation) имеет аннотацию @NotNull, которая запрещает сохранение сущности, если аннотированное свойство равно нулю. Я не уверен, что hibernate-validator будет работать с EclipseLink, но должна быть реализация javax.validation для EclipseLink.

Но если вы хотите заблокировать установку пустых значений - тогда измените слой, который устанавливает значения, а не сами сущности.

2 голосов
/ 18 января 2010

Не уверен, что это ответ, который вы ищете, но вы проверили шаблон проектирования пустых объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...