hibernate 使用注解进行级联删除

在网上看了下级联删除都是主表删除的时候同时删除副表的相关数据,可不可以弄成副表删除时同时删除主表数据?数据库主表:应用--终端关系表CREATETABLE`r_termi... 在网上看了下级联删除都是主表删除的时候同时删除副表的相关数据,可不可以弄成副表删除时同时删除主表数据?
数据库
主表:应用--终端 关系表
CREATE TABLE `r_terminal_application` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`application_version_id` bigint(20) NOT NULL,
`terminal_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK1C2451BA760AF476` (`terminal_id`),
KEY `FK1C2451BAD08942D5` (`application_version_id`),
CONSTRAINT `FK1C2451BA760AF476` FOREIGN KEY (`terminal_id`) REFERENCES `m_terminal` (`id`),
CONSTRAINT `FK1C2451BAD08942D5` FOREIGN KEY (`application_version_id`) REFERENCES `m_application_version` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;

副表:终端表
CREATE TABLE `m_terminal` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
-----------------------------------------------------------------------------------------------------------
RTerminalApplication.java中配置
@Entity
@Table(name = "R_TERMINAL_APPLICATION")
public class RTerminalApplication extends BaseModel {

private MTerminal terminal;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TERMINAL_ID", nullable = false)
//在这里使用cascade的话,是删除关系表数据时触发同时删除终端,我想要相反的效果

public MTerminal getTerminal() {
return terminal;
}

}
------------------------------------------------------------------------------------------------------------
终端表与终端应用关系表的对应应该是一对多吧,怎样实现删除一个终端时,级联删除关系表里面维护的这几条数据呢?
这个问题解决了,我在MTerminal.java 中加了如下语句:
//在这里该加什么注解来不进行维护之类的
private Set<RTerminalApplication> rTerminalApplications=new HashSet<RTerminalApplication>();

@OneToMany(mappedBy="terminal",fetch=FetchType.LAZY,cascade={javax.persistence.CascadeType.REMOVE})

public Set<RTerminalApplication> getrTerminalApplications() {
return rTerminalApplications;
}
public void setrTerminalApplications(
Set<RTerminalApplication> rTerminalApplications) {
this.rTerminalApplications = rTerminalApplications;
}
现在的问题是每次涉及到terminal的操作,好像都会对这个set做一系列的操作,set里面数据越多,页面返回结果时间越长,很明显的那种时间消耗增加。请问对这个set,该使用什么注解?还是怎么办?
展开
 我来答
创哥很忙
2013-03-13
知道答主
回答量:34
采纳率:0%
帮助的人:21万
展开全部
我好久没写过hibernate了。我看了一下我以前写的一个论坛代码,删除帖子同时删除级联的评论的功能。我是这么写的。
在帖子的vo类中的评论的get set方法上面加上这个。
@OneToMany(mappedBy="post",fetch=FetchType.EAGER,cascade=CascadeType.REMOVE)

希望能帮助你。
追问
我查了半天也是这个思路,现在不知道这句注解写到哪里?RTerminalApplication这个类的get set么?可以帮我写下具体方法吗?
追答
@Entity
@Table(name="t_post")
public class Post {
private int id;
private String title;
private String content;
private String board;
private User user;
private Set comment;
private Date posttime;
public Post(int id, String title, String board, User user, Date posttime) {
super();
this.id = id;
this.title = title;
this.board = board;
this.user = user;
this.posttime = posttime;
}
public Post(){
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Lob
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getBoard() {
return board;
}
public void setBoard(String board) {
this.board = board;
}
@ManyToOne
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@OneToMany(mappedBy="post",fetch=FetchType.EAGER,cascade=CascadeType.REMOVE)
public Set getComment() {
return comment;
}
public void setComment(Set comment) {
this.comment = comment;
}
public Date getPosttime() {
return posttime;
}
public void setPosttime(Date posttime) {
this.posttime = posttime;
}
}
这是的帖子类写法,你参考一下。
laozibi
2013-03-25 · TA获得超过7966个赞
知道大有可为答主
回答量:1.3万
采纳率:0%
帮助的人:4580万
展开全部
我没有写冬眠。我看着在一个论坛上,我以前写的代码,删帖,删除级联的评论。这是我写的。评论
帖子VO类,上面的方法加。
@一对多(通过mappedBy =“POST”,取= FetchType.EAGER,级联= CascadeType.REMOVE)

希望能帮助你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式