2010-12-01 2 views
3

У меня есть несколько валидаций на моей сущности, как @NotNull, и некоторые из поколения, какпроверки не работает на EntityManager.merge()

@Id 
@GeneratedValue(strategy = AUTO) 
@Column(name = "ID") 
private Long id; 

@Column 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long referenceNumber; 

Однако при вызове EntityManager.merge() эти значения не генерируются. Нулевые поля с @NotNull аннотация передается без каких-либо жалоб. Даже id не генерируется.

Должен ли я каким-то образом переключить это поколение? Как и где?

+0

Вы жаловались на два поведения. Один из них - `id-generation`, а другой -` bean-validation on merge() `. @axtavt ответил о первом, а @kraftan ответил на это последним. И я голосовал за @ kraftan's. – 2013-01-31 06:15:13

ответ

1

В дополнение к ответу kraftan в:

  • По умолчанию автоматической проверки боба в JPA 2.0 работает, если поставщик проверки «присутствует в окружающей среде», в противном случае он молча не работает. Вы можете добавить

    <validation-mode>CALLBACK</validation-mode> 
    

    к persistence.xml для того, чтобы генерировать ошибку, если поставщик проверки не найден.

  • JPA не поддерживает генерацию произвольных (не id) свойств. Некоторые поставщики JPA могут иметь extensions.
6

Merge() не вызывает прослушиватели событий предварительной установки/предварительного обновления по умолчанию. flush() после merge() должен это сделать.

+0

Я могу это подтвердить. Благодарю. Указана ли эта функция? – 2013-01-31 06:09:38

Смежные вопросы