有三张表:作者表,图书表,中间表
中间表实体类: private Integer id;
private Authors authors;
private Books books;
保存图书的时候要保存中间表:
authorisbnList = new ArrayList<Authorisbn>();
for(int i=0;i<aus.length;i++){
Authorisbn ab = new Authorisbn();
ab.setBooks(book);
Authors authors= new Authors();
authors.setId(Integer.parseInt(aus[i]));
ab.setAuthors(authors);
authorisbnList.add(ab);
}                        dao.saveOrUpdate(book);
if(book.getId()!=null){
dao.delById(Authorisbn.class, book.getId());
}
for(int i=0;i<authorisbnList.size();i++){
dao.saveOrUpdate(authorisbnList.get(i));
}
问题:book对象的主键是自动生成的id,ab.setBooks(book);时里边没有id,所以老提示id为空,该怎么解决?

解决方案 »

  1.   

    既然book对象的主键是自动生成的,
    Books类里面应该没有id这个属性吧。
      

  2.   

    fz_zhou,会设置断点,但是保存图书的时候只有dao.saveOrUpdate(book);保存到数据库之后才会生成bookid,而保存中间表时这个bookid是一个外键;我用了spring的事务管理,所以就出现了这种情况
      

  3.   


    ab.setBooks(book);book这个变量是什么时候声明的?打个断点看看book里面有id没得。
    另:既然一本书只对应一个作者,中间表用来干什么,直接在图书表中增加一个字段保存作者Id不就行了。
      

  4.   

    flagiris,说的很对,就是这样的,但是老是抛出异常,说id为空
      

  5.   

    hibernate自动生成的实体类是有id的
      

  6.   

    引用 5 楼 flagiris 的回复:既然book对象的主键是自动生成的,
    Books类里面应该没有id这个属性吧。
    hibernate自动生成的实体类是有id的