各位大侠我用注解配置一个多的实体一个用户 一个代码 为什么我删除多的一方的数据时候跟他与之相关的用户那条数据也被删除了 废话不多说上代码请各位大侠多多指教用户的
package com.sxt.model;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;import org.hibernate.annotations.Cascade;@Entity
@SequenceGenerator(name="sequence",sequenceName="seq_test",allocationSize=1)
@Table(name="msuser")
public class User {
private int userId;
private String userName;
private int sex;
private int age;
private int salary;
private IdCard idCard;
private Set<Address> addSet=new HashSet<Address>();
@OneToOne(cascade=CascadeType.ALL,mappedBy="user")
public IdCard getIdCard() {
return idCard;
} public void setIdCard(IdCard idCard) {
this.idCard = idCard;
} @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
@Column(name="userId",unique=true,nullable=true)
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Column(name="userName")
public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
@Column(name="sex")
public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
}
@Column(name="age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
@Column(name="salary")
public int getSalary() {
return salary;
} public void setSalary(int salary) {
this.salary = salary;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
public Set<Address> getAddSet() {
return addSet;
} public void setAddSet(Set<Address> addSet) {
this.addSet = addSet;
}
}
地址的
package com.sxt.model;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;@Entity
@SequenceGenerator(name="sequence",sequenceName="seq_test",allocationSize=1)
@Table(name="address")
public class Address {
private String addrName;
private int addrId;
private User user;
public Address(){} public Address(String addrName, int addrId, User user) {
super();
this.addrName = addrName;
this.addrId = addrId;
this.user = user;
}
@Column(name="addr_name")
public String getAddrName() {
return addrName;
} public void setAddrName(String addrName) {
this.addrName = addrName;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
@Column(name="addr_id")
public int getAddrId() {
return addrId;
} public void setAddrId(int addrId) {
this.addrId = addrId;
} @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id")
@OnDelete(action=OnDeleteAction.NO_ACTION)
public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}
然后删除的方法。。
private static void deleteUserandAddr() {
Address add1=new Address();
Configuration cf=new AnnotationConfiguration();
cf.configure("hibernate.cfg.xml");
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
//开启事务
session.beginTransaction();
User user=(User) session.load(User.class, 124);
System.out.println(user.getUserName());
Set<Address> addrSet=user.getAddSet();
for (Address address : addrSet) {
System.out.println(address.getAddrName());
if(address.getAddrName().equals("广州")){
System.out.println("广州我来了");
user.getAddSet().remove(address);
session.delete(address);
}
}
//提交事务
session.getTransaction().commit();
session.close();
sf.close();
}
执行的时候显示的sql语句
Hibernate:
delete
from
address
where
addr_id=?
Hibernate:
delete
from
address
where
addr_id=?
Hibernate:
delete
from
msuser
where
userId=?
package com.sxt.model;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;import org.hibernate.annotations.Cascade;@Entity
@SequenceGenerator(name="sequence",sequenceName="seq_test",allocationSize=1)
@Table(name="msuser")
public class User {
private int userId;
private String userName;
private int sex;
private int age;
private int salary;
private IdCard idCard;
private Set<Address> addSet=new HashSet<Address>();
@OneToOne(cascade=CascadeType.ALL,mappedBy="user")
public IdCard getIdCard() {
return idCard;
} public void setIdCard(IdCard idCard) {
this.idCard = idCard;
} @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
@Column(name="userId",unique=true,nullable=true)
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Column(name="userName")
public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
@Column(name="sex")
public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
}
@Column(name="age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
@Column(name="salary")
public int getSalary() {
return salary;
} public void setSalary(int salary) {
this.salary = salary;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
public Set<Address> getAddSet() {
return addSet;
} public void setAddSet(Set<Address> addSet) {
this.addSet = addSet;
}
}
地址的
package com.sxt.model;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;@Entity
@SequenceGenerator(name="sequence",sequenceName="seq_test",allocationSize=1)
@Table(name="address")
public class Address {
private String addrName;
private int addrId;
private User user;
public Address(){} public Address(String addrName, int addrId, User user) {
super();
this.addrName = addrName;
this.addrId = addrId;
this.user = user;
}
@Column(name="addr_name")
public String getAddrName() {
return addrName;
} public void setAddrName(String addrName) {
this.addrName = addrName;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
@Column(name="addr_id")
public int getAddrId() {
return addrId;
} public void setAddrId(int addrId) {
this.addrId = addrId;
} @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id")
@OnDelete(action=OnDeleteAction.NO_ACTION)
public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}
然后删除的方法。。
private static void deleteUserandAddr() {
Address add1=new Address();
Configuration cf=new AnnotationConfiguration();
cf.configure("hibernate.cfg.xml");
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
//开启事务
session.beginTransaction();
User user=(User) session.load(User.class, 124);
System.out.println(user.getUserName());
Set<Address> addrSet=user.getAddSet();
for (Address address : addrSet) {
System.out.println(address.getAddrName());
if(address.getAddrName().equals("广州")){
System.out.println("广州我来了");
user.getAddSet().remove(address);
session.delete(address);
}
}
//提交事务
session.getTransaction().commit();
session.close();
sf.close();
}
执行的时候显示的sql语句
Hibernate:
delete
from
address
where
addr_id=?
Hibernate:
delete
from
address
where
addr_id=?
Hibernate:
delete
from
msuser
where
userId=?
解决方案 »
- lucene做数据库高级搜索
- 一个幼稚的问题,怎么在图片上放文本框
- myeclipse+sql2005无法获取session
- 为什么我连接java.com检查我是否安装了java时会弹出让我登陆
- 求大神,报错org.hibernate.hql.ast.QuerySyntaxException
- 请教:wml页面中如何在两个card之间传递与接收参数值?(急)
- 后台验证的结果如何在struts框架中用弹出对话框的方式显示?
- 邀请Java高手加入群
- JBuilder 开发EJB的问题???
- EJB求教
- j2ee SSH 整合错误,求解答!
- 求高人解决 java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (SCOTT.DEPT2_PK)
很可能是配置了,因为hibernate若配置了该项会帮你自动删除。具体配置还是google下吧。
本人也只是理论
public Set<Address> getAddSet() {
return addSet;
}
把上面cascade属性去掉,或者改成其他的···