@Transactional在JPA实体中不起作用

时间:2014-05-09 05:54:33

标签: java spring hibernate jpa

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用Active Record模式使您的Entity成为胖域模型(而不是Java EE世界中最常见的瘦模型)。 你想要做的事情不会像春天那样有效。

如果你重构你的方法不是静态的(第一个问题),那么让@Transactional处理JPA实体的一种方法是使用Spring中的@Configurable注释(使它由Spring管理 - 因此解决第二个问题),加载时间编织和Java代理。有关详细信息,请参阅thisthis

答案 1 :(得分:-1)

也许您应该尝试使用注释:

@Transactional(readOnly=false)