2010-10-22 14 views
0

J'ai 3 tables comme suit:Hibernate beaucoup à une relation delete ne fonctionne pas comme prévu

  1. utilisateur a userId
  2. UserProductEntitlement a userId et productId et un
  3. booléen produit a productId

C'est ma représentation de classe:

@Table(name="User") 
class User 
{ 
    @OneToMany(fetch=FetchType.EAGER, targetEntity = ProductEntitlement.class, cascade=CascadeType.ALL)  
    @JoinColumn(name = "userId")  
    Set<ProductEntitlement> viewableProducts = new HashSet<ProductEntitlement>(); 
} 

@Table(name = "UserProductEntitlement") 
class ProductEntitlement 
{ 
    @EmbeddedId 
    private ProductEntitlementPk productPk; 

    @Column(name = "X_ENABLED") 
    @Type(type = "yes_no") 
    private Boolean xEnabled; 

     @Embeddable 
    private static class ProductEntitlementPk implements Serializable {   

     ProductEntitlementPk() { 
     } 

     ProductEntitlementPk(User user, Product baseProduct) { 
      this.role = role; 
      this.baseProduct = baseProduct; 
     } 

     @ManyToOne(optional = false, targetEntity = User.class) 
     @ForeignKey(name = "FK_USER") 
     @JoinColumn(name = "userId", nullable = false) 
     private User user; 

     @OneToOne(optional = false, targetEntity = BaseProduct.class) 
     @ForeignKey(name = "FK_Product") 
     @JoinColumn(name = "productId", nullable = false) 
     private Product baseProduct; 

    } 

} 

Ainsi, au départ, lorsqu'un utilisateur se connecte, tous ses droits sont chargés. Mais lorsque je tente de supprimer un ProductEntitlement de jeu viewableProduct, mise en veille prolongée tire une déclaration de mise à jour comme:

update UserProductEntitlement set userId= null where userId=? 

J'ai deux questions:

  1. pourquoi il tire à jour au lieu de supprimer?
  2. C'est le plus gros problème - où l'instruction est userId =? au lieu de userId =? et productId =?

Une aide/suggestion à ce sujet serait appréciée.

Répondre

0

Apparemment, vous avez oublié d'ajouter l'annotation @Cascade à viewableProduct.

Voir les détails here.

+0

Oui, je l'ai ajouté .. Désolé, j'ai oublié de l'ajouter à la question postée. Cela n'a pas aidé non plus. – user483788