多对一 多对多 级联更新问题

1.

//@OneToMany(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.LAZY, mappedBy = "industry")  这里的一对多必须设置@JoinColumn跟多对一里的字段一致,而不设置mappedBy。

@OneToMany(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.LAZY)

@JoinColumn(name = "INDUST_ID")

private Set<Sup> sups = new HashSet<Sup>(0);

@ManyToOne(fetch = FetchType.LAZY)

@JoinColumn(name = "INDUST_ID")

private Industry industry;//

这样在删除industry时才会级联设置 sup里面的indust_id这个字段为空,也就是去掉关联了,才删除得了industry.

2.

以下是多对多

@ManyToMany(cascade={CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.LAZY)

@JoinTable(name="ES_C_PRO_ES_C_SPEC",inverseJoinColumns={@JoinColumn(name="CSPECS_SPEC_ID")},joinColumns={@JoinColumn(name="ES_C_PRO_CPRO_ID")})

     private Set<Cspec> cspecs = new HashSet<Cspec>(0);// 规格

@ManyToMany(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch=FetchType.LAZY)

@JoinTable(name="ES_C_PRO_ES_C_SPEC",inverseJoinColumns={@JoinColumn(name="ES_C_PRO_CPRO_ID")},joinColumns={@JoinColumn(name="CSPECS_SPEC_ID")})

private Set<Cpro> cpros=new HashSet<Cpro>(0);//有哪些产品是用这个规格的

这里多对多里面两方都一定要设置@JoinTable inverseJoinColumns.......这一整句,这样在双方删除时才会把关联表里的记录给删掉,去掉关联后才能正常删除。

猜你喜欢

转载自520shuijing.iteye.com/blog/2092545