我正在研究我在Hibernate中的第一个应用程序 . 我只有一个没有关联的实体用户
用户实体定义:
@Entity @Table(name =“USERS”)公共类用户{@Id
@Column(名称= “USER_NAME”)
private String userName;
@Column(名称= “PASSWORD”)
私有字符串密码;
@basic
@Column(名称= “电子邮件”)
私人String电子邮件;
和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,userName);
问题是我没有返回User对象,而是使用新的处理程序成员返回User _ $$ _ javaassit对象
handler = org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer userName = null password = null email = null
我理解延迟加载是什么以及什么时候应该使用它,但这不是这些情况之一 . 我宁愿不为整个系统“关闭它”,因为我将在以后使用它 .
我在这里缺少什么建议?
2 回答
你错过了Session.get()方法 .
Session.load()
正好用于返回代理 . 它需要父实体的状态,但只需要一个引用 .顺便说一句,JPA等效方法被称为
getReference()
,而相当于get()
的JPA是find()
.我认为默认情况下,hibernate会对所有实体进行延迟加载 . 检查此链接http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html
只是一个想法,而不是直接使用hibernate(意味着使用会话),你可以尝试使用JPA规范的EntityManager,你可以尝试在你的情况下绑定Hibernate的持久单元 . 这有助于将来轻松移植到不同的ORM .