0

Avec une classe @Entity contenant un champ:-vous appliquer la taille minimale d'une collection en JPA ou Hibernate

@JsonProperty("arrays") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "systemID", nullable = true) 
private List<PVArray> arrays = null; 

qui définit une collection. L'étape suivante consiste à appliquer que arrays doit avoir une ou plusieurs entrées.

Le système est en cours de développement avec Spring Boot, utilisant Jackson pour la sérialisation/désérialisation JSON, et Hibernate et JPA pour la persistance. Je pense qu'une contrainte comme celle-ci doit être imposée manuellement. Je n'ai trouvé aucune annotation décrivant cette contrainte. L'application manuelle dans le setter ne semble pas suffisante - et si le JSON entrant n'a tout simplement pas de champ arrays? Le setter ne serait jamais appelé et aucune chance d'exécution.

Est-il possible d'écrire une méthode appelée après la désérialisation du JSON? Ou plus généralement (parce que évidemment les classes sont instanciées d'une autre manière que la désérialisation de JSON), une méthode appelée à la fin de l'instanciation de l'objet, de sorte que les contraintes d'objet peuvent être appliquées?

J'ai d'autres contraintes à considérer que la taille de certaines collections. Par exemple, une classe ne peut avoir qu'un seul de ses champs, pas les deux.

+1

https://docs.oracle.com/javaee/7/ api/javax/validation/contraintes/Size.html –

+0

Ce n'est pas JPa, qui persiste simplement ce que vous avez. L'API de validation du bean Java est ce dont vous avez besoin. Mettre à jour la question et les balises – DN1

+0

Merci pour le pointeur - encore un autre évier de cuisine à apprendre. Je serai en mesure d'essayer @Size dans quelques jours. –

Répondre

1

vous pouvez faire quelque chose comme ceci:

@Size(min=1, max=10) 
@JsonProperty("arrays") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "systemID", nullable = true) 
private List<PVArray> arrays; 

Avec la taille, vous dites que vous avez au moins besoin de 1 à 10 éléments