J'ai 3 tables comme suit:Hibernate beaucoup à une relation delete ne fonctionne pas comme prévu
- utilisateur a userId
- UserProductEntitlement a userId et productId et un
- 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:
- pourquoi il tire à jour au lieu de supprimer?
- 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.
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