2010-11-24 18 views
1

Je le code suivant:association mapping Hibernate OneToMany avec restriction contrainte

@Entity 
class A{ 
    @Id 
    private Long id; 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "a", cascade = CascadeType.ALL) 
    private List<B> bs =new ArrayList<B>(); 
... 
} 

@Entity 
class B{ 
    ... 

    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL) 
    @JoinColumn(name = "aId", nullable = false) 
    private A a; 
} 

Je veux mise en veille prolongée de ne pas persister A si bs.isEmpty(). Avec ce code, Hibernate persiste A même s'il n'a pas d'objets B à l'intérieur.

Connaissez-vous une solution pour cela?

Merci à l'avance

Répondre

0

Je ne pense pas que vous pouvez ajouter une contrainte à l'aide des annotations.

Je pense que ce que vous demandez peut être fait en implémentant un Event Listener, qui reçoit toutes les insertions en cours. Voir le Hibernate manual, chapter 12.2 - The Event System, et le javadoc for PreInsertEventListener. Plus précisément, je crois que cette méthode peut être utile pour vous:

boolean  onPreInsert(PreInsertEvent event) 
      Return true if the operation should be vetoed 

De l'événement passé, vous obtenez l'instance de l'objet qui sera inséré par la méthode getEntity() du PreInsertEvent.
Renvoie la valeur true dans la méthode onPreInsert et vous arrêtez l'insertion.

N'oubliez pas d'installer l'écouteur dans le fichier hibernate.cfg.xml.

Questions connexes