8

我有一个 Spring 3 + JPA 2.0 应用程序。在我的@Controller我需要一个初始化的对象,但我有代理,我需要能够以编程方式初始化它。我需要类似于org.hibernate.Hibernate.initialize(Object).

有人可以帮忙吗。该对象用于 AJAX 操作。如果属性是代理,我无法将其作为 JSON 发送

4

3 回答 3

4

据我所知,没有 JPA 选项。你应该使用Hibernate.initialize(..).

事实上,当我查看 hibernate 实现时,惰性集合似乎在很多情况下都被初始化了,这是人们意想不到的。喜欢entityManager.contains(..)Persistence.getPersistenceUtil().isLoaded(...)。试试这些,但我认为你不应该依赖这样的实现细节。

于 2011-01-13T13:28:21.433 回答
1

我们在我们的应用程序中做类似的事情,我们发现拆分我们的数据库实体对象并为 JSON 输出添加另一组类很有用。

如果您使用的 JSON 框架只检查您的对象并为对象上的每个属性提取一些 JSON,那么就能够拥有以下对象:

PersonEntity - 由 JPA 和 PersonJsonOutput 管理的类 - 专为 JSON 输出设计的类

从长远来看可能更安全。这允许您拥有不会自动反映在 JSON 服务中的数据库更改,您可能希望对 JSON 服务进行版本控制,而不是在数据库实体更改后立即中断旧版本。

它还可以让您更好地控制 JSON 输出,例如日期格式或强制数据库中的数字成为 JSON 中的字符串等...

这个答案实际上只取决于您如何生成 JSON,但听起来您的库会进行一些自省。

于 2011-01-24T22:31:32.527 回答
0

我知道已经很晚了,答案被接受了,但是另一种标准的 JPA 方法是在从 DAO 返回对象之前调用您希望初始化的列表上的 size() 方法:

Object.getList().size(); 

这使您不必作弊并使用特定于实现的机制进行初始化

于 2015-06-29T13:08:56.707 回答