当前位置: 首页 > 知识库问答 >
问题:

如何在没有事务的情况下将实体保存到数据库中?

邢飞雨
2023-03-14

我可以在Spring Boot应用程序中保存实体,而无需@Transactional。我之所以注意到这一点,是因为在EmployeeService.java中的save方法中添加了@Transactional之后,我才能够更新实体。

我没有在类级别上注释@Transactional。在我的服务层中找到的唯一其他位置是不属于save方法的方法。我的EmployeeDAO未扩展JPARepository。它用@Repository注释。我有springbootstarter数据jpa作为依赖项。我也不是手动开始或提交事务。

员工ontroller.java

@PostMapping("/employees")
public void addEmployee(@RequestBody Employee employee) {
    employee.setId(0);

    employeeService.save(employee);
}

员工ervice.java

public void save(Employee employee) {
    emplDAO.save(employee);
}

EmployeeDAO.java

@Override
public void save(Employee employee) {
    Session currentSession = em.unwrap(Session.class);

    currentSession.saveOrUpdate(employee);
}

共有1个答案

伏星汉
2023-03-14

默认情况下,Spring BootWeb应用程序中的Spring.jpa.open in view设置为true

很可能就是这个原因

从Spring Boot参考指南:

如果您正在运行一个web应用程序,Spring Boot默认注册OpenEntityManagerViewInterceptor以应用“视图中的OpenEntityManager”模式,以允许在web视图中延迟加载。如果不希望出现这种行为,则应在应用程序.properties中将spring.jpa.openin view设置为false

另见:

  • Spring Boot中的spring.jpa.open in view=true属性是什么

 类似资料:
  • 我正在尝试开发一个小型电子商务项目。我有一个篮子和篮子项目实体。我只是想当我为客户保存购物篮时,我想把购物篮项目保存在数据库中。我认为我不应该为篮子项目创建存储库。我应该能够保存篮子项目,同时使用篮子存储库保存篮子。 在这里,我试图通过篮子服务获得一个篮子项目,并将其设置为篮子实体并保存它。 我有什么问题?我有个例外。

  • 问题内容: 我有两个实体: 保存首选项时,我具有accountId,但没有Account实体。在这种情况下,如何保存首选项? 加载帐户实体并在首选项上进行设置?对我来说,这似乎是对数据库的错误旅行。 是否具有一个可持久保存的accountId字段并使Account字段为只读?同时拥有一个accountId字段和一个Account字段似乎多余吗? 使用NamedQuery保留首选项?我希望只是通用地

  • 我有一个方法,它调用另一个方法来保存具有新事务的实体对象。 process()正在调用FooCreator类中的createFoo()方法,以使用@Transactional(传播=传播。需要\u NEW)创建foo对象。 在process方法中修改返回的foo对象时,它会另存为新对象。如何修改createFoo()返回的现有foo对象? 如果我尝试findById,它仍会引发异常。 如何在新事务

  • 我有一个链接服务器,正在尝试删除链接服务器中的表中的某些内容。我正在使用transaction并尝试在存储过程中捕获,如下所示。 使用此代码,我在事务中有许多插入和删除。它给出了这个错误:链接服务器“服务器”的OLE DB提供程序“SQLNCLI11”返回消息“没有事务处于活动状态”。 我了解到,如果我在它上面使用SET XACT_ABORT,它将丢弃任何进程,如果它在运行时遇到任何错误,它将自动

  • 我发现在Spring Data Rest设计相关问题的许多答案中提到了“聚合根”和“实体”以及“值对象”。 我认为存储库等同于聚合根。 案例1 我的问题是围绕这一点,假设有两个实体——User和UserSettings,在数据库中表示为两个表和UserSettings,它们的外键User_id指向User。 在本例中,我希望对用户和用户设置都执行GET/POST。从一些帖子中,我发现存储库应该位于

  • 问题内容: 我有一个带有特殊重音的CSV文件,并通过选择UTF-8编码将其保存在记事本中。当我使用Java读取文件时,它也会读取BOM表字符。 因此,我想以UTF-8格式保存此文件,而不必最初在记事本中附加BOM。 否则,Java中是否有内置类可以消除读取文件内容时开头出现的BOM字符? 问题答案: 使用Notepad -免费且比Notepad好得多。使用Enconding > 在没有BOM的UT