我在spring数据jpa中使用jpatransactionmanager,provider是Hibernate。
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryBean" />
</bean>
我有三个实体说Aentity,Bentity。 A和B具有一对一的关系。有第三个实体Centity。 Centity的持久性与Aentity和Bentity无关。但是,我发现每当Centity被保存时,Aentity和Bentity会自动刷新到db。我想控制这种行为,并希望确保在我使用存储库调用save时它们应该被保留。
其他信息: 对于B,Aentity有cascase Centity的交易信息是:Propogation:需要new和isolation = default
我在许多论坛上看过但找不到提示/解决方案。
答案 0 :(得分:0)
可能启用了自动提交,因此一旦调用save方法,实体就会刷新到数据库。 试试这个。
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
答案 1 :(得分:0)
如果您对不想存储在数据库中的相关对象进行了一些修改,则应像这样将它们与entityManager分离:
static void applyToEntity(User user, EntityManager entityManager) {
entityManager.detach(user); //Detach object because temp settings can be accidentally stored
entityManager.detach(user.client) //Detach object because of temp settings can be accidentally stored
user.client.showActivityContacts = true;
user.allowRoles = true;
}
这将导致这些对象将不再被级联保存,因为它们将不再被管理。