Hibernate双向一对多数据关联:一个盒子Box有多个卡片card @Entity
@Table(name="BOX")
public class Box
{
@Id
private Integer id; @OneToMany(fetch=FetchType.LAZY )
@JoinColumn(name="BOX_ID")
@org.hibernate.annotations.Cascade(
value={org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN}) 
@org.hibernate.annotations.IndexColumn(name="POS_NO", base=0)
private List<Card> cards = new ArrayList<Card>(); ....
}
@Entity
@Table(name="CARD")
public class Card
{
@Id
private Integer id; @ManyToOne
@JoinColumn(name="BOX_ID")
private Box box @Column(name="POS_NO")
private Integer posno ; ....
}我如此注释映射是否存在问题?
我执行删除一个Card时报错。。public class bus
{
public Box delandGet(Integer boxId, Integer delCardid){
Box bx = getHibernateTemplate().get( Box.class, id );
List<Card> cds =  bx.getCards();
Card del = null;
int di = -1;
for(int i=0; i<cds.size() ; i++){
Card c = cds.get(i);
if(c.id.equals(delCardid){
del = c;
di = i;
break;
}
}
if(di != -1){
cds.remove(di);
del.setBox(null);
getHibernateTemplate().delete( del ) ;
}
}
}后台:执行sql不对!!清各位贤达执教?在此本人多多感谢!Hibernate: update CARD set BOX_ID=null, POS_NO=null where BOX_ID=? and id=?
Hibernate: update CARD set BOX_ID=null, POS_NO=null where BOX_ID=? and id=?

解决方案 »

  1.   

       应该去掉del.setBox(null);
      

  2.   

    去掉del.setBox(null);
    本人试过一样不行
    主要很奇怪?hibernate 为何要先要更新为NULL
    Hibernate: update CARD set BOX_ID=null, POS_NO=null where BOX_ID=? and id=?
      

  3.   

    删除的实体必须在数据库中存在,就是说getHibernateTemplate().delete( del ) ;
    这个del实体你赋了null值,那么数据库就找不到要删除的记录,所以删不了,你应该让del对象是一个
    对应了数据库中的一条记录,才能删掉
      

  4.   

    cds.remove(di);// 从关联列表中移出del.setBox(null);// del(Card)对象不与Box对象关联上面的for循环确认 del对象是一个对应了数据库中的一条记录