我正在为应用程序使用Spring data JPA的存储库。目前,我正在使用spring data jpa存储库默认提供的基本CRUD操作,对于复杂的join查询,我正在编写定制的JPQL查询,如下所示:
public interface ContinentRepository extends JpaRepository<Continent, Long>
{
@Query(value = "SELECT u FROM Continent u JOIN FETCH ... WHERE u.id = ?1")
public List<Continent> findContinent(Long id);
}
在我的服务类中,我自动生成这个存储库并执行DB操作。
@Service
public class MyService
{
@Autowired
public ContinentRepository cr;
public void read()
{
var result1 = cr.findContinent(1);
var result2 = cr.findContinent(2);
}
@Transactional
public void write()
{
var c = new Continent();
// setters
c = cr.save(c);
}
}
目前,我只是将write()
标记为org.springframework.transaction.annotation.transactional
。
read()
方法标记为transactional(readOnly=true)
?因为它只执行读取操作。FindContinent(Long id)
标记为事务性(readOnly=true)?我读到所有的默认方法都标记为事务性https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions实际上并不需要,但是它可能会根据本博客https://vladmihalcea.com/spring-read-only-transaction-hibernate-optimization/创建一些关于缓存内存消耗的优化
与第一种情况相同的答案
一般来说,我添加到了方法级别,因为我对rollback等参数有更多的控制
我建议您在服务级别使用,因为在服务级别,您可以更新许多表(因此可以使用许多存储库),并且您希望您的整个更新都是事务性的。
问题内容: 我在正在使用的一个应用程序中使用Spring和Hibernate,但是在处理事务时遇到了问题。 我有一个服务类,该类从数据库中加载一些实体,修改它们的一些值,然后(当所有内容都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),但我不想保留更改。为了防止Spring / Hibernate保存更改,我在方法中抛出异常。但是,这导致以下错误: 这是服务: 这就是我调用
我在一个应用程序中使用Spring和Hibernate,我在处理事务时遇到了问题。 我有一个服务类,它从数据库加载一些实体,修改它们的一些值,然后(当一切都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),我不想保留更改。为了防止Spring/Hibernate保存更改,我在方法中抛出一个异常。但是,这会导致以下错误: 这就是服务: 我就是这样调用它的: 我希望发生的事情是:
我有一个应用程序通过jpa对各种数据库表进行大量写入。其中一个写入可能会导致乐观锁异常。如果抛出一个,没什么大不了的,我希望事务的其余部分提交。 我通过以下方式查看了Spring事务上的无回滚功能: 我的应用程序捕获了实体的合并方法周围的OLException,该方法将引发此异常,但事务仍会回滚。我做了一些挖掘,看看发生了什么,在JpaTransactionManager的doCommit方法中,
我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的db实体。如果任何调用失败,我希望事务完全回滚。但是,这不是观察到的行为。这是我的代码: 也有and,但是当事务在第二次调用时失败时,第一个被提交。
问题内容: 我有一个模型,该模型具有相当大的子实体图,并且hibernate最终制作了大约9条语句来懒惰地获取所有所需的数据,但是深度约4层时,出现“无法初始化代理- 没有会话”错误,我不知道为什么。 控制者 主持人 计划 计划明细 手册部分 例外 任何帮助,将不胜感激。 问题答案: 如果您希望保持 延迟加载 并且正在使用Spring Boot,只需在 application.properties
我正在寻找一种不需要创建不同于其他方法的HibernateTransactionManager的解决方案。