我对Spring@Transactional
注释和persist有一个误解。我使用的是Spring3.1,带有JPA和Hibernate。我认为persist意味着将实体添加到持久性上下文中(但在提交或刷新之前不要执行任何查询),而@Transactional
注释意味着用事务包装方法。
然而,在这个简短的例子中,当执行指针到达持久性时,它会失败并出现异常,因为name不能为null(db约束)。
import javax.persistence.EntityManager;
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void test() {
Brand brand = new Brand();
entityManager.persist(brand);
brand.setName("test");
}
如果我交换setName()
和坚持()
,一切正常。然而,我不明白为什么反过来没有,因为我认为任何查询都将在方法结束时构建和执行。
有人能解释一下吗?
持久化执行"插入"查询。事务注释仅用于启动事务,如果发生异常,则回滚事务。
由于事务注释,它在方法末尾提交。但是新记录是在persist上创建的,任何异常都可以抛出。
在方法结束之前,它仍然可以回滚;我通常用回滚来注释异常。
在JPA中,一旦一个对象传递给持久化(),它就成为“托管”,作为成为托管的一部分,JPA实现必须为持久化对象生成一个id。
如果id生成基于自动增量(GenerationType.IDENTITY),然后需要向数据库发出插入语句以获取并分配密钥。当id生成基于序列/表时,ID由JPA实现托管的id池管理和分配,在这种情况下,不需要直接插入。
有一个对象被传递到持久性()并且已经被管理,对它的任何更改都是持久性字段,必须刷新到事务的数据库中。在您的情况下,如果id生成是Idid,则必须在更新之后插入。如果id生成是其他方法,那么一个插入语句就足够了。如果事务回滚,则根本不应该将任何SQL发送到数据库。
这是Batoo JPA中的实现。
希望这有意义。
我需要实现Spring的@Transactional注释,但我无法实现。 在过去的三个星期里,我尝试了很多方法,但没有一个奏效。 我还需要使用EntityManager。为了测试Spring是否有效,我尝试使用@PersistenceContext注入EntityManager(我还尝试使用@PersistenceUnit和/或与EntityManager Factory一起),但我总是得到nul
问题内容: 之间有什么区别? 在整个类中添加“ @Transactional”注释 为每个方法添加“ @Transactional”注释? 使用spring和Hibernate吗? 问题答案: 基本上,如果您用所有方法注释该类,则将是事务性的。如果您不这样做,则可以仅将其标注为所需的方法。此外,你可以为每个方法指定不同的属性,如,,,…
问题内容: 我正在尝试创建事务管理器,并将其与Hibernate for Oracle一起使用。 我的persistence.xml文件是: 在spring的applicationContext.xml中,我添加了: 但是,当我运行时: 我有一个例外: Hibernate基础文件文件除外。 可能是什么问题呢? Hibernate持久性如何知道引用Spring bean? 问题答案: 持久性提供程序
在我们的一个项目中,我们遇到了一个问题,Spring忽略了事务注释,然后失败了,出现了以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2018-09-13 15:05:18406错误[主]组织。springframework。靴子SpringApplication应用程序运行失败组织。springframework。道。Inva
我将Spring 3.2.4与JavaFX结合使用,并希望实现一种方法,其中操作将在事务中执行。我在控制器中的代码如下所示: 以及我的应用程序上下文: 尝试运行时,我收到以下错误消息: 该方法存在。删除注释,或者将方法从public更改为private,或者从配置中删除bean,程序就会运行,但事务注释根本不起作用。删除代理目标会导致另一个错误。
我正在阅读使用Spring框架的事务管理。在第一个组合中,我使用Spring Hibernate和Hibernate的API来控制事务(Hibernate API)。接下来,我想使用注释进行测试,它确实起了作用。 我感到困惑的是: > JPA、JTA、Hibernate是否有自己的事务管理方式。举个例子,考虑如果我使用Spring Hibernate,在那种情况下,你会使用“JPA”事务吗? 就像