我使用Spring data
我的项目,我使用的是标准Repository
是extends CRUD Repository
。Spring JPA:Save()方法应该向数据库提交数据吗?
我的代码按预期工作,但是当我拨打repository.save()
数据库是而不是改变了?
难道我还需要再调用这个后一个commit
为了改变数据库?还是应该repository.save()
方法自动更改数据库?
我使用Spring data
我的项目,我使用的是标准Repository
是extends CRUD Repository
。Spring JPA:Save()方法应该向数据库提交数据吗?
我的代码按预期工作,但是当我拨打repository.save()
数据库是而不是改变了?
难道我还需要再调用这个后一个commit
为了改变数据库?还是应该repository.save()
方法自动更改数据库?
当你的应用程序运行时,与线程关联的实体管理器会修改或添加对象的控制,保存()方法只是这样做,这是一个标志,上面写着:“这应该是保存在数据库中。”
数据库DML(插入,更新,删除),而保存的东西不会被发送到数据库中,它是在年底刚刚完成提交之前,它推迟到最后一刻。
使用实体管理器的flush()方法,您可以在任何时候发送DML到数据库,事实上,您可以调试数据库日志并查看您的查询,但对数据库的更改只会显示在您的数据库连接中,直到发出提交; commit()是与实体管理器关联的事务的一种方法。
在喜欢打一些框架的1.4.x后的反应观点是正确的解析和渲染发出的提交。
再见, 汉斯
如果配置这样
<tx:annotation-driven />
<jpa:repositories base-package="com.greg" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.greg" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
然后被标注了@Transaction任何方法将启动,如果没有异常被抛出提交事务。
嗨,伙计, 请看看我的用例[这里](http://stackoverflow.com/questions/39679766/jparepository-save-method-does-not-commit-using-derby-db) 我我无法通过JpaRepository.save()方法提交更改。 –
同样的事情......并没有很好地理解事务在这种情况下是如何工作的。 – Sergey
当您使用上面的相应配置添加@Transaction注解时,Spring容器将代理您的类,并且它会将代码(如transaction.begin(),transaction.commit()和transaction.rollback())添加到代理中,实际运行的代码。或者,如果您喜欢spring容器将交易代码添加到您的课程并运行它。 –
通常,save方法应该被封装在一个事务中(spring-data为你透明地执行)。如果您编写自己的方法,则需要使用@ Transactional注释修改方法。 – fateddy
我已注释了我正在调用的主要方法,并保存了一个事务性注释但仍不起作用 – java123999
您可以发布存储库的代码,包括保存方法+ TransactionManager配置吗? – fateddy