标签: java spring hibernate jpa
我在实体中有一个静态方法
@Transactional public static void updateState() { entityManager().createNativeQuery("UPDATE TABLEA SET hide = 1 WHERE id= 1").executeUpdate(); }
但是当我调用该方法时,我发现一个异常,说更新语句需要一个事务。
我是否以错误的方式使用@Transactional?
@Transactional
答案 0 :(得分:1)
您似乎正在尝试使用Active Record模式使您的Entity成为胖域模型(而不是Java EE世界中最常见的瘦模型)。 你想要做的事情不会像春天那样有效。
如果你重构你的方法不是静态的(第一个问题),那么让@Transactional处理JPA实体的一种方法是使用Spring中的@Configurable注释(使它由Spring管理 - 因此解决第二个问题),加载时间编织和Java代理。有关详细信息,请参阅this和this。
@Configurable
答案 1 :(得分:-1)
也许您应该尝试使用注释:
@Transactional(readOnly=false)