出于某种原因,即使参数对象具有已存在于数据库中的id,我的JPA存储库也不会更新现有数据库实体,而是创建新实体 .
这是我的配置:
<jpa:repositories base-package="com.someName.repository.support"
transaction-manager-ref="transactionManager_Support"
entity-manager-factory-ref="entityManagerFactory_Support"/>
<bean id="transactionManager_Support" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory_Support"/>
<property name="nestedTransactionAllowed" value="true"/>
</bean>
<bean id="entityManagerFactory_Support" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSourceSupport"/>
<property name="persistenceXmlLocation" value="classpath:persistence.xml"/>
<property name="persistenceUnitName" value="persistenceUnit_SUPPORT"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
</props>
</property>
</bean>
<persistence-unit name="persistenceUnit_SUPPORT" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- List of all entity classes here -->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy" />
<property name="hibernate.connection.charSet" value="UTF-8" />
</properties>
</persistence-unit>
我有一个服务包装器方法定义如下:
@Transactional("transactionManager_Support")
public TestingResult save(TestingResult testingResult) {
try {
testingResult = testingResultRepository.saveAndFlush(testingResult);
LOGGER.info(String.format("Testing Result with id [%d] was successfully persisted", testingResult.getId()));
} catch (Exception e) {
LOGGER.error("Error persisting Testing Result");
}
return testingResult;
}
这种方法被多次调用 . testsResult第一次具有null id,因此它会按预期使用新id保存 . 之后,再次保存具有一些新属性集的相同对象,因为我需要更新DB中的现有实体 . 但是,创建DB中的新记录时,id增加1 . 任何人都可以澄清为什么会出现这种行为?