我在实体中有一个静态方法
@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 代理。请参阅this和 this了解更多详情。
关于java - @Transactional 不适用于 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23557507/