如何强制初始化Hibernate JPA代理以在JSON调用中使用它

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

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

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

事实上,当我看一下hibernate实现时,懒惰的集合似乎在许多情况下被初始化,而人们不会期望。 像entityManager.contains(..)Persistence.getPersistenceUtil().isLoaded(...) 。 试试这些,但我认为你不应该依赖这些实现细节。

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

如果您正在使用一个JSON框架,它只检查您的对象并为对象上的每个属性释放一些JSON,那么就可以拥有如下对象:

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

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

它还可以根据日期格式或强制数据库中的数字作为JSON中的字符串等来更好地控制JSON输出…

这个答案实际上只取决于你如何生成你的JSON,但听起来你的库做了一些内省。

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

 Object.getList().size(); 

这样可以避免欺骗并使用特定于实现的机制进行初始化