在用SSH做程序的时候,我要在数据库的外键表里插入数据,可是它总提示org.hibernate.TransientObjectException,说主键id不可以插入到外键表中。数据库里也是没有插入进信息的,谁能告诉我这个错误到底是错在哪里啊?
原因:主键对象是暂态对象 因为它和外键对象都在同一个hibernate事务中 这个事务没有提交主键对象就没有在数据库生成数据,那么你再用它的id插入外键表 当然是不行了
可能是hibernate配置文件的主外键关联配置的不对解决方法:1)xml配置:原因就像上面的说的,你可以尝试着在 <many-to-one>里加入cascade="all"属性。
<many-to-one cascade="all"/>2)annotation:@ManyToOne(cascade={CascadeType.ALL})
官方解释如下:
CascadeType.PERSIST:级联新增CascadeType.MERGE:级联合并CascadeType.REFRESH:级联刷新CascadeType.REMOVE:级联删除CascadeType.ALL:以上四种都是