Hibernate注解中的manytomany级联与不级联删除问题的解决

本文介绍了在Hibernate中处理多对多关系时,如何配置级联删除和非级联删除。通过调整 CascadeType 和数据库外键约束,可以实现删除Tag时,是否同时删除关联的用户信息。级联删除需设置CascadeType.ALL或CascadeType.REMOVE,非级联删除则需移除CascadeType.REMOVE并设置数据库外键约束为CASCADE。

两个类用户信息和用户Tag类型  多对多的关系

1.用户信息类

package com.yunmiao.bean.player;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.yunmiao.bean.base.BaseModel;

/**
* @ClassName: PlayerBindInfo 
* @Description: 玩家绑定的个人信息
* @author Jay He
* @date 2015年8月31日 上午11:13:35 
*
 */
@Entity
@Table(name="player_bind_info", catalog="vgame")
public class PlayerBindInfo extends BaseModel{

    private static final long serialVersionUID = 9138118201233047164L;
    
        // 跟服务器关联的用户名  规则: agentId-serverId-用户id
 	private String uname;
 	private Set<PlayerTagType> tags = new HashSet<>();
 	// 用户真实姓名
 	private String name;
 	//性别
 	private short sex;
 	//年龄
 	private Integer age;
 	// 生日
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")  //取日期时使用  
 	@DateTimeFormat(pattern = "yyyy-MM-dd")//存日期时使用  
 	private Date birthday;
 	// 电话
 	private String phone;
 	// Email
 	private String email;
 	// QQ
 	private String qq;
 	
	public String getUname() {
	    return uname;
	}
	public void setUname(String uname) {
	    this.uname = uname;
	}
	
	@ManyToMany(cascade = { CascadeType.PERSIST }, targetEntity = PlayerTagType.class, fetch = FetchType.EAGER)
	    @JoinTable(name = "palyer_info_tag", joinColumns = { @JoinColumn(name = "player_info_id", updatable = true) }, inverseJoinColumns = { @JoinColumn(name = "tag_id", updatable = true) })
	    @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE })
	public Set<PlayerTagType> getTags() {
	    return tags;
	}
	public void setTags(Set<PlayerTagType> tags) {
	    this.tags = tags;
	}
	public String getName() {
	    return name;
	}
	public void setName(String 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值