各位大侠我用注解配置一个多的实体一个用户 一个代码 为什么我删除多的一方的数据时候跟他与之相关的用户那条数据也被删除了 废话不多说上代码请各位大侠多多指教用户的
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=?

解决方案 »

  1.   

    楼主在hibernate里面配置了级联阐述?
    很可能是配置了,因为hibernate若配置了该项会帮你自动删除。具体配置还是google下吧。
    本人也只是理论
      

  2.   

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
    public Set<Address> getAddSet() {
    return addSet;
    }

    把上面cascade属性去掉,或者改成其他的···
      

  3.   

    把cascade去掉是一种方法还有就是删多一方的时候 写address.setUser(null)也可以完成 谢谢各位大侠回帖