DUser表为1,DCompany 为多,DCompany 中的@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)不能删除,应为需要保存DCompany 时,同时也级联保存DUser信息,现在的问题的,我想删除DUser,可以报错 deleted object would be re-saved by cascade (remove deleted object from,删除失败,该如何处理呢,谢谢了,还有一个问题就是一个网友告诉我一对多一般都是set,即如下
/**
* 用户信息
*/
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private Set users = new HashSet();
我用的是list,请问有什么说道吗,谢谢
删除代码为:
[code="java"]
@Test
public void del() {
DUser user = userService.findById("4028805527c3648d0127c36490560002");
System.out.println(user.getUserName());
userService.remove(user);
}
[/code]
[code="java"]
public class DUser extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = -7733922431721279323L;
/**
* 用户标识
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String userId;
/**
* 姓名
*/
private String userName;
/**
* 所属公司信息
*/
@ManyToOne (cascade = CascadeType.ALL)
@JoinColumn(name = "comId")
private DCompany company;
/**
* 性别标识M.男F.女
*/
private String userSex;
/**
* 密码
*/
private String userPass;
/**
* Email
*/
private String userEmail;
/**
* 电话
*/
private String userTel;
/**
* qq
*/
private String userQq;
/**
* 是否冻结 0冻结 1正常
*/
private Integer userEnable;
/**
* 创建时间
*/
private Timestamp userCreateDate;
[/code]
[code="java"]public class DCompany extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 2472916124848152035L;
/**
* 公司标识
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String comId;
/**
* 公司名称
*/
private String comName;
/**
* 用户信息
*/
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private List<DUser> users;
/**
* 商品信息
*/
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private List<DGoods> goods;
/**
* 公司地址
*/
private String comAddress;
/**
* 公司经营类别
*/
private String comType;
/**
* 公司简介
*/
private String comIntro;
/**
* 公司电话
*/
private String comTel;
/**
* 增加时间
*/
private String comCreateDate;[/code]
我现在这么弄的
DUser user = userService.findById("4028805527c3648d0127c36490560002");
user.setCompany(null);
userService.remove(user);
可以删除了,不是是不是最理想的状态,另外在问下
删除user信息的时候是先根据id查出DUser对象,然后在删除DUser对象
这样在数据库中就导致了生成两条sql语句
1.select * from user where id ...
2.delete from user where id ....
这样会不会影响效率呢,如果直接用hql删除会不会更好些
另外 DUser user = userService.findById("4028805527c3648d0127c36490560002");
findById的时候是用load好呢还是get好呢,谢谢了,在次感谢