我可以在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);
}
默认情况下,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