1.实现:
主表实体:A
从表实体:B
在主表的实体类上设置了如下关系,从表未做关系设置:
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="id")
public List<B> b;保存数据的方法:
public void update(A ModiA) {
this.getHibernateTemplate().saveOrUpdate(ModiA);
}2.问题:在我编辑或删除主表的数据后,总是会把从表的对应主键置为空。而我想要的效果是编辑主表时,不修改从表信息。删除主表时级联删除从表信息。是否是哪里配置错误??如果配置有问题,应如何配置?
控制台的SQL如下:
Hibernate: update A set billdate=?, deptno=?, maker=?, re=? where id=?
Hibernate: update B set id=null where id=?

解决方案 »

  1.   

    你都@JoinColumn(name="id")了能不删从表id么
      

  2.   

    你可以试试在B中加个 A a,然后关系设置改为:
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER, mappedBy = "a")
      

  3.   

    解决方案很多、我们是直接在数据库端设置一个级联删除。程序没有做控制。当然也可以在程序段控制。具体查看一下hibernate API、
      

  4.   


    “在B中加个 A a”怎么加?用的注解是什么?我加了如果不用任何注解,会出“java.sql.SQLException: ORA-00904: "B_"."A": invalid identifier”错误。
      

  5.   

    是试了有问题,继续问怎么解决嘛。“在B中加个 A a”怎么加?用的注解是什么?我加了如果不用任何注解,会出“java.sql.SQLException: ORA-00904: "B_"."A": invalid identifier”错误。
      

  6.   

    单端(A):
    private List<B> b@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "a")
    多端(B):
    private A a@ManyToOne(cascade={ CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST })
    @JoinColumn(name = "A_ID")
    //A_ID是B表中对应A主键的列