hibernate怎么用注解实现级联删除?
比如我有一个一对多——组对用户。我是否可以清空组里的用户,提交修改update,那边的用户就全部自动清除了?@EntitypublicclassBook{privateS...
比如我有一个一对多——组 对 用户。
我是否可以清空 组 里的 用户,提交修改update,那边的用户就全部自动清除了?
@Entity
public class Book {
private Set<Bao> baos = new HashSet<Bao>();
@OneToMany(cascade={CascadeType.ALL})
public Set<Bao> getBaos() {
return baos;
}
public void setBaos(Set<Bao> baos) {
this.baos = baos;
}
}
@Entity
@Table
public class Bao {
private Book book;
@ManyToOne
public Tao getBook() {
return tao;
}
public void setBook(Book book) {
this.book = book;
}
} 展开
我是否可以清空 组 里的 用户,提交修改update,那边的用户就全部自动清除了?
@Entity
public class Book {
private Set<Bao> baos = new HashSet<Bao>();
@OneToMany(cascade={CascadeType.ALL})
public Set<Bao> getBaos() {
return baos;
}
public void setBaos(Set<Bao> baos) {
this.baos = baos;
}
}
@Entity
@Table
public class Bao {
private Book book;
@ManyToOne
public Tao getBook() {
return tao;
}
public void setBook(Book book) {
this.book = book;
}
} 展开
3个回答
展开全部
@OneToMany(cascade={CascadeType.ALL},orphanRemoval=true)
public Set<Bao> getBaos() {
return baos;
}
这样就行了。不过orphanRemoval只能是JPA2中才能使用,相当于说hibernate3.5之后版本支持。
public Set<Bao> getBaos() {
return baos;
}
这样就行了。不过orphanRemoval只能是JPA2中才能使用,相当于说hibernate3.5之后版本支持。
更多追问追答
追问
还是没用呢。我替换为了hibernate3.6 final的版本 也更改了相应的包。如hibernate-jpa-2.0-api-1.0.0.Final.jar
程序能运行。但是就是不能级联删除。
这个@OneToMany 带 mappedBy和不带mappedBy 都试过了。
不带mappedBy让它多生成一张中间表,更新的时候可以删除掉中间表的数据,另外一头的表删不掉。
追答
不光要清空组里的用户,关键是把用户里面那个组设置为空,你mapped相当于让one方放弃关系维护,所以你才看到没有设置mapped的时候中间表删除了就是这个原因
展开全部
hibernate 自动生成的表是不可以实现的,你需要需修改数据库的外键属性,你用的是mysql的话,可以把生成的表右击属性,打开设计表,点到“外键”选项卡,把删除,更新改成CASCADE,就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在实体类的字段上加注解
casde=DELETE
更多追问追答
追问
您说的这个我不知道怎么用。
追答
把你的两个实体类发上来,我给你改一下
给你发一个实体类的配置Demo吧
@Entity
@Table(name = "food")
public class Food implements Serializable, Comparable<Food> {
private static final long serialVersionUID = 1444309570305197674L;
@GenericGenerator(name = "generator", strategy = "increment")
@Id
@GeneratedValue(generator = "generator")
@Column
private Long id;
@NotEmpty
@Column(nullable = false)
private String name;
@Column(name = "create_time", nullable = false)
private Date createTime;
@Column(name = "update_time", nullable = false)
private Date updateTime;
@OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
@OrderBy("id asc")
private Set<Food> categories;
@ManyToOne
@JoinColumn(nullable = true)
private Food parent;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询