Hibernate Lazy загружается, когда это не имеет смысла - PullRequest
2 голосов
/ 28 февраля 2012

Я работаю над своим первым приложением в 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, пароль varchar (45) NOT NULL, электронная почта varchar (45) NOT NULL);(Как я уже сказал, я все упростил:)

извлечение пользовательской записи выполняется следующим образом:

Пользователь c = (Пользователь) sessionFactory.getCurrentSession (). Load (User.class, userName);

Проблема в том, что я не возвращаю объект User, а объект _ $$ _ javaassit пользователя с новым элементом обработчика

handler =org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer userName = нулевой пароль = нулевой адрес электронной почты = нулевой

Я понимаю, что такое отложенная загрузка и когда ее следует использовать, но это не одна из этих ситуаций.Я бы предпочел не «выключать» ее для всей системы, поскольку я буду использовать ее позже.

Есть предложения, что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Вам не хватает метода Session.get().

Session.load() используется именно для возврата прокси.Это полезно, например, когда вам просто нужна ссылка на сущность, чтобы установить в качестве родителя дочерней сущности.В этом случае вам не нужно состояние родительского объекта, а только ссылка.

Кстати, эквивалентный метод JPA называется getReference(), тогда как JPA, эквивалентный get(), равен find().

0 голосов
/ 28 февраля 2012

Я думаю, что Hibernate по умолчанию выполняет ленивую загрузку для всех сущностей.проверьте эту ссылку http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

Просто подумайте, вместо того, чтобы использовать hibernate напрямую (имеется в виду использование сеанса), вы можете попробовать использовать EntityManager, который является спецификацией JPA, и вы можете попытаться связать постоянный модуль, который находится в Hibernate втвой случай.это поможет в будущем легко портировать на другой ORM.

...