昨天在开发过程中遇见个这样的报错:org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
问题详细描述:
现有个数据表A和数据表B,想从数据表A中将数据通过代码复制到表B中,数据表A和数据表B结构一致,唯一区别是数据表B中没有设置主键。由于框架用的是Hibernate,所以在写实体类的时候必须要加@Id这个标签。程序编译、启动均无报错,但在执行存储操作时会报“org.hibernate.NonUniqueObjectException”,经过研究发现问题出现在实体类中的主键生成策略上。由于数据表A中的主键下内容存在重复项,所以数据表B在做存储时,当@Id对应的字段下内容出现存储到重复数据时报错。 我尝试了在@Id对应的column中添加unique=false属性 (取消唯一性),但依然没能解决问题。最后在数据表B中新加了个Id字段,把@Id标签给到id字段上,并设置strategy=GenerationType.SEQUENCE,问题解决。
(SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。)
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name="id")
private int Id;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131321.html