java - Hibernate,将域对象写入接口(interface)以进行延迟加载

标签 java hibernate

为什么 Hibernate 要求将其实体写入接口(interface),以便它们能够通过延迟加载正确工作?

最佳答案

hibernate 需要接口(interface)的唯一场景是集合。这是因为 hibernate 使用自己的集合实现来进行延迟加载 - PersistentBag , PersistentSet等并将它们分配给您的字段。这些实现保存对 session 的引用,以便它们可以在需要时填充数据。

Hibernate 可以分配 PersistentSetprivate Set<Foo> set; (他们通过反射来做到这一点),但对于 private HashSet<Foo> set; 来说不可能这样做,因为PersistentSet不扩展 HashSet

至于懒@*ToOne关联 - hibernate 使用 javassist (或 cglib)创建代理对象,并且不需要接口(interface)。无论如何,这是一个很少使用的功能,并且代理是真实对象的子类,所以除非您使用 getclass() (你不应该这样做),它工作得很好。

关于java - Hibernate,将域对象写入接口(interface)以进行延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928245/

相关文章:

java - RabbitMQ 请求响应和消息确认

java - Hibernate 3 不自动创建表

java - Spring 3/Hibernate 中回滚事务的最佳实践

java - 将 JLabel 添加到面板 - 如何正确布局组件?

java - 在 FragmentPagerAdapter 中设置图标和标题

java - 如何复制 "ant run"以使用 appclient 执行 Glassfish ACC 客户端

java - 方法未发现异常,但方法确实存在并已实现

java - 从数据库映射文件和 POJOS for postgres 不工作

java - 用户注册表单 Spring MVC

java - 从 HQL 中的时间戳提取日期以在 where 子句中进行比较