【发布时间】:2010-07-19 11:32:53
【问题描述】:
环境:JBoss Seam、JPA、休眠
我们使用@PostLoad 注解来动态初始化@Entity 中的一些瞬态变量(有时这涉及到查找父实体来初始化状态——这是一个代价高昂的操作)。
但在某些情况下,我们不希望触发此@PostLoad,因为我们不会依赖瞬态变量。
有没有办法在加载后动态控制数据。
解决此问题的一种方法是仅按需调用此方法(即通过删除 @PostLoad 注释并手动调用此方法),但这也容易出错。
有没有其他方法可以解决这个问题。
【问题讨论】:
-
我认为您必须告诉我们您希望 Hibernate 如何知道何时触发 postLoad 以及何时不触发?基于实体的数据?如果您想要在读取数据之前执行以下操作: session.pleaseTriggerPostLoad(Foo.class) ,那么这与按需显式调用该方法没有什么不同。
-
能够将这样的标志发送到 JPA 查询会很有帮助,因为这些类型的状态更新程序在大型集合上运行时以及在急切的情况下会很昂贵。我从销售人员数据中收集帐户时遇到了类似的问题。将尝试自定义查询以获取要构建的 ID 列表,然后使用重载的构造函数加载对象,并设置阻止更新的 noExpiry 标志。