gpt4 book ai didi

java - Hibernate - 持久化两个对象时出现 NonUniqueObjectException

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:56 26 4
gpt4 key购买 nike

我在将多个对象保存到数据库时遇到问题。我得到 org.hibernate.NonUniqueObjectException: 具有相同标识符值的不同对象已与 session 关联我的代码:配置cfg = new Configuration(); cfg.configure("hibernate.cfg.xml");

    ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(
cfg.getProperties()).build();
SessionFactory factory = cfg.buildSessionFactory(registry);
Session session = factory.openSession();
Transaction t = session.beginTransaction();

Person p1 = new Person();
p1.setFirstName("Name1");
p1.setLastName("Surname1");

session.persist(p1);

Person p2 = new Person();
p2.setFirstName("Name2");
p2.setLastName("Surname2");

session.persist(p2);
t.commit();
session.close();

当我只保留一个对象时,一切正常。请帮忙。

编辑:

问题出在映射文件 (*.hbm.xml) 中:这段代码意味着,我必须在java代码中定义ID

<id name="id" type="int">
<column name="ID" />
<generator class="assigned" />
</id>

此代码自动设置 ID:

<id name="id" type="int">
<column name="ID" />
<generator class="increment" />
</id>

现在每个新对象都会自动拥有唯一的 ID

最佳答案

问题似乎出在 Person 类的 key 生成策略中。您使用的是哪一款?该错误意味着当将第二个人附加到 session 时,第一个人已经存在并具有相同的数据库 ID。

尝试确保 @Id 字段中没有设置任何值,让 Hibernate 使用 key 生成策略为其生成一个值。这是一个起点:

@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;

还要确保在 Person 的构造函数中没有使用键的默认值。

关于java - Hibernate - 持久化两个对象时出现 NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com