免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3437 | 回复: 1
打印 上一主题 下一主题

hibernate annotation多对多问题:insert关系前先delete [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-17 09:48 |只看该作者 |倒序浏览
10可用积分
我用hbiernate annation写的代码,维护多对多关系时,出了个奇怪的问题:

1:Operator.java
@Entity
//@Table(name="operator"

public class Operator implements java.io.Serializable,IfTableModel {

    private static final long serialVersionUID = 1L;
    public static final String [] column={"编号","姓名","其他信息"};
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;
    @Column(name = "name",unique=true)
    private String name;
    @Column(name = "msg")
    private String msg;
   
    @ManyToOne(targetEntity=base.Role.class)//,cascade={CascadeType.PERSIST,CascadeType.MERGE} )

    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    @JoinColumn(name="RoleId")
    private Role role;
   
    @ManyToMany(targetEntity=base.Department.class)
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    @JoinTable(
        name="operator_department ",
        joinColumns={@JoinColumn(name="OperatorId")},
        inverseJoinColumns={@JoinColumn(name="DepartId")}
            )
    private List<Department> departs=new ArrayList();


}



2epartment.java


@Entity
@Table(name = "department")

public class Department implements java.io.Serializable,IfTableModel {

    private static final long serialVersionUID = 1L;
    public static final String Id = "id";
    public static final String Name = "name";
    public static final String [] column={"编号","部门名称"};
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @ManyToMany(targetEntity=base.Operator.class,mappedBy="departs")
    private List<Operator> operators=new ArrayList();
   
}



关系说明:operator和department是多对多的关系,其中,operator端负责关系的维护
3:对operator和department操作的代码

        Transaction tx2= se.beginTransaction();
        BaseUtil u=new BaseUtil();
        List<Department> departs=u.getDepartments();
        List<Operator> opers=u.getOperators();
        opers.get(0).getDeparts().add(departs.get(0));
        opers.get(0).getDeparts().add(departs.get(1));
        tx2.commit();

现在期望的sql代码是:insert into operator_department  (OperatorId, DepartId) values (?, ?)
这里出现一个奇怪的问题是,现在总是先
delete from operator_department  where OperatorId=?
然后才把所有原来的关系重新插入一遍
insert into operator_department  (OperatorId, DepartId) values (?, ?)
insert into operator_department  (OperatorId, DepartId) values (?, ?)
insert into operator_department  (OperatorId, DepartId) values (?, ?)
这样严重影响性能,各位高人帮忙看看什么原因啊?

论坛徽章:
0
2 [报告]
发表于 2007-10-24 09:33 |只看该作者
没有人知道么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP