Спящий режим, выберите по идентификатору или уникальному столбцу - PullRequest
3 голосов
/ 17 июня 2010

Я использую hibernate для Java и хочу иметь возможность выбирать пользователей по идентификатору или по имени из базы данных.

Приятной особенностью Hibernate является то, что он кэширует результат по id, но я, похоже, не могу сделать его кешированным по имени.

static Session openSession = Factory.openSession();

public static User GetUser(int Id) {
    return (User) openSession.get(User.class, new Integer(Id));
}

public static User GetUser( String Name ){
   return (User) openSession.createCriteria( User.class ).
           add( Restrictions.eq("username", Name) ).
           uniqueResult();

}

Если я использую GetUser (1) много раз, hibernate покажет только то, что он выполнен в первый раз.

Но каждый раз, когда я использую GetUser ("user1"), hibernate показывает, что он выполняет новый запрос к базе данных.

Каков наилучший способ кэширования строкового идентификатора?

1 Ответ

2 голосов
/ 17 июня 2010

Вам необходимо использовать кеш запросов, чтобы избежать доступа к базе данных при запросах по имени.

http://www.javalobby.org/java/forums/t48846.html

...