gpt4 book ai didi

java - 多次保存同一对象

转载 作者:行者123 更新时间:2023-12-01 13:33:30 24 4
gpt4 key购买 nike

解决方案:设置 Id = null 就可以了。

此代码在 Tomcat 7 上完美运行,但在 Glassfish 4 上仅保存一次。该代码的目的是多次合并对象的同一实例。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<class>entities.Secao</class>
<class>entities.Funcionario</class>
<class>entities.Unidade</class>
<class>entities.Patrimonio</class>
<class>entities.Descricao</class>
<class>entities.Classificacao</class>

<validation-mode>AUTO</validation-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/patrimonio" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />

</properties>
</persistence-unit>

public void save() {
int i = 0;
EntityManager em = JpaUtil.getEntityManager();

while (i < 10) {
em.merge(item);
i = i + 1;
}
item = new Item();
}

最佳答案

em.merge(item); 更新数据库中的项目,或在不存在时插入项目。因此,如果没有更改,并且刷新设置为自动,则只需要一次合并 - 因为 item 在合并之间不会更改。

如果您想多次存储此item,则必须em.persist(item)。如果 @id 列未设置为 generate,您可能必须更新 pk 属性 - 否则您将遇到 ConstraintViolationException

应用程序服务器中的 JPA 实现可能多种多样,因此您可能会在运行时观察到不同的查询。检查您的刷新策略和 JTA 设置。但是,一般来说,当持久化项在与持久化上下文分离时未更改时,不需要合并。

关于java - 多次保存同一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421261/

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