Hibernate Lazy在没有意义的情况下加载

时间:2012-02-28 15:44:06

标签: hibernate postgresql spring-mvc lazy-loading

我正在使用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;

和Users表创建时使用:

  

CREATE TABLE USERS(user_name varchar(45)PRIMARY KEY,password     varchar(45)NOT NULL,email varchar(45)NOT NULL);   (正如我所说,我保持简单:)

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

  

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

问题是我没有返回User对象,而是使用新的处理程序成员返回User _ $$ _ javaassit对象

  

handler = org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer   userName = null password = null email = null

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

我在这里缺少什么建议?

2 个答案:

答案 0 :(得分:1)

您错过了Session.get()方法。

Session.load()正好用于返回代理。例如,当您只需要将实体引用设置为子实体的父项时,它很有用。在这种情况下,您不需要父实体的状态,只需要引用。

BTW,JPA等效方法称为getReference(),而等同于get()的JPA为find()

答案 1 :(得分:0)

我认为默认情况下,hibernate会对所有实体进行延迟加载。点击此链接http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

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