java - @Transactional 不适用于 JPA 实体

标签 java spring hibernate jpa

我在实体中有一个静态方法

@Transactional
public static void updateState() {
    entityManager().createNativeQuery("UPDATE TABLEA SET hide = 1 WHERE id= 1").executeUpdate();
}

但是当我调用该方法时,我捕获到一个异常,说更新语句需要事务。

我是否以错误的方式使用了@Transactional

最佳答案

您似乎正在尝试按照 Active Record 模式使您的实体成为胖域模型(而不是 Java EE 世界中最常见的瘦模型)。 您尝试做的事情不会像 Spring 中那样有效。

如果您将方法重构为非静态的(第一个问题),那么让 @Transactional 在 JPA 实体上工作的一种方法是使用 @Configurable 注释Spring(使其由 Spring 管理 - 因此解决了第二个问题),以及加载时编织和 Java 代理。请参阅thisthis了解更多详情。

关于java - @Transactional 不适用于 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23557507/

相关文章:

Java 从命令行列出类方法

java - 常量池中的无效字节标记 : 19 error message

java - 在使用 JPA 在 Spring 中保持多对一关系的同时,它添加了额外的不必要的父实体

SQL 联合到 NHibernate 标准

java - 如何在java Rest API中使用GET方法调用传递json数据

java - 当按值排序时,compareTo 将 10 设置在 2 之前

在两种类型之间进行转换的 Java 通用实用方法

java - 当两个不相关的表都有复合主键时,Hibernate 连接两个表

java - 为什么 op-assign 运算符在 java 中不是类型安全的?

java - 由于缺少 bean,Web 服务器无法启动