休眠 - 使字段在预加载事件时瞬态



我有一个非常复杂的实体,我希望分两个阶段加载:

  1. 加载所有业务数据
  2. 加载所有元数据

我想分开装载。

是否可以仅使用反射 API 在运行时将字段声明为@Transient?我尝试使用 preLoad 事件,但找不到如何设置字段瞬态。

谢谢伊多布

1)注释信息是Java类信息的一部分。不能在运行时进行更改。当然,你可以生成一些字节码生成工具:javaassist 或 cglib 来生成类并在运行时加载适当的实体实现。但它看起来像丑陋的黑客。此外,此解决方案非常复杂且不稳定。

2)尽量不要破解并增加应用程序的复杂性。最好重构现有的域模型。考虑一下,您需要为您的域提供几个固定的表示形式。

3)此外,如果您确实需要实体的弱结构,您可以将实体序列化为XML或二进制格式,并以文本(或者您的数据库支持XMLType)或Blob存储在数据库中。


如果您在使用LazyInitializationException时遇到问题,并且您正在开发Web应用程序,请尝试考虑OpenSessionInView模式。Hibernate将为每个请求创建一个Hibernate会话。因此,您可以在一个请求中使用Hibernate对象进行操作,而无需考虑LazyInitializationException。

不能在运行时使用反射更改 Java 中的任何注释。有关如何使用 Javassist 添加注释的示例在这里。

相关内容

  • 没有找到相关文章

最新更新