【问题标题】:Hibernate Lazy loads when it does not make senseHibernate Lazy 在没有意义时加载
【发布时间】:2012-03-18 02:33:45
【问题描述】:

我正在开发我在 Hibernate 中的第一个应用程序。我只有一个没有关联的实体用户

用户实体定义:

@Entity @Table(name="USERS") 公共类用户{

@Id
@Column(name="USER_NAME")
private String userName;

@Column(name="PASSWORD")
private String password;

@Basic
@Column(name="EMAIL")
private String email;

并且用户表是通过以下方式创建的:

创建表用户(用户名 varchar(45) 主键,密码 varchar(45) NOT NULL,电子邮件 varchar(45) NOT NULL); (正如我所说,我保持简单:)

获取用户记录的方式如下:

用户 c = (User) sessionFactory.getCurrentSession().load(User.class, 用户名);

问题是我没有取回一个用户对象,而是一个带有新处理程序成员的 User_$$_javaassit 对象

handler = org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 用户名=null 密码=null 电子邮件=null

我了解什么是延迟加载以及何时应该使用它,但这不是这些情况之一。 我宁愿不为整个系统“关闭”它,因为我稍后会使用它。

有什么我在这里缺少的建议吗?

【问题讨论】:

  • 我也注意到了这一点,当调用 criteria.getList() 时,所有惰性字段都已加载,我不希望它们加载。你有没有得到任何地方?

标签: hibernate postgresql spring-mvc lazy-loading


【解决方案1】:

您缺少Session.get() 方法。

Session.load() 精确地用于返回代理。例如,当您只需要一个实体的引用来设置为子实体的父级时,这很有用。在这种情况下,您不需要父实体的状态,而只需要一个引用。

顺便说一句,JPA 等效方法称为 getReference(),而 JPA 等效于 get()find()

【讨论】:

    【解决方案2】:

    我认为休眠默认情况下会延迟加载它看起来的所有实体。检查此链接http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

    只是一个想法,而不是直接使用休眠(意味着使用会话),您可以尝试使用 JPA 规范的 EntityManager 并且您可以尝试绑定在您的情况下是休眠的持久单元。这有助于将来轻松移植到不同的 ORM。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2015-05-08
      • 1970-01-01
      相关资源
      最近更新 更多