JpaRepository save刷新所有实体

时间:2016-12-18 13:45:26

标签: hibernate spring-data-jpa spring-transactions

我在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

我在许多论坛上看过但找不到提示/解决方案。

2 个答案:

答案 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;
 }

这将导致这些对象将不再被级联保存,因为它们将不再被管理。