0

我有3个表如下:

  1. 用户有用户 ID
  2. UserProductEntitlement 具有 userId 和 productId 以及一个布尔值
  3. 产品有productId

这是我的班级代表:

@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;

    }   

}

因此,最初当用户登录时,他的所有权利都会被加载。但是当我尝试从 viewableProduct 集中删除 ProductEntitlement 时,hibernate 会触发更新语句:

update UserProductEntitlement set userId= null where userId=?

我这里有两个问题:

  1. 为什么它触发更新而不是删除?
  2. 这是更大的问题——userId=? 而不是 userId=? 和productId =?

对此的任何帮助/建议将不胜感激。

4

1 回答 1

0

看起来您忘记在 viewableProduct 中添加 @Cascade 注释。

在此处查看详细信息。

于 2010-10-23T06:45:05.793 回答