2010-12-01 17 views
3

J'ai peu sur mon entité de validation, comme @NotNull, et une génération, commevalidation ne fonctionne pas sur EntityManager.merge()

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

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

Cependant lorsque vous appelez EntityManager.merge() ces valeurs ne sont pas générées. Les champs Null avec l'annotation @NotNull sont passés sans se plaindre. Même id n'est pas généré.

Dois-je changer cette génération d'une manière ou d'une autre? Comment et où?

+0

Vous vous êtes plaint de deux comportements. L'un est 'id-generation' et l'autre est' bean-validation on merge() '. @axtavt a répondu à propos de l'ancien et @kraftan a répondu à propos de ce dernier. Et j'ai voté pour @ kraftan. –

Répondre

1

En plus de la réponse de kraftan:

  • Par défaut validation de haricot automatique JPA 2.0 fonctionne si le fournisseur de validation est « présent dans l'environnement », sinon il ne fonctionne pas en silence. Vous pouvez ajouter

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

    à persistence.xml afin de générer une erreur si le fournisseur de validation est introuvable. JPA ne prend pas en charge la génération de propriétés arbitraires (non-id).

  • Certains fournisseurs JPA peuvent avoir extensions.
6

Merge() n'invoque pas les écouteurs d'événement de pré-insertion/pré-mise à jour par défaut. flush() après le merge() devrait le faire.

+0

Je peux le confirmer. Merci. Cette fonctionnalité est-elle spécifiée? –