2012-04-21 2 views
0

У меня есть объект в Hibernate с несколькими лениво загруженными столбцами many-to-one. Мне не обязательно, чтобы объект сохранялся в базе данных для набора операций.Как отделить постоянные атрибуты объекта Hibernate

Как я могу получить объект напрямую, чтобы каждый раз, когда я пытаюсь получить доступ к множеству к одному объекту, ему не нужно лениво извлекать из базы данных, и я могу получить значение (неважно, последний) без открытия сеанса.

Сейчас я открываю сеанс, создавая новый объект и отправляя его для операций, которые необходимо выполнить.

// Hibernate class 
public class Foo { 
    private Long id; 

    //many-to-one mapping 
    private Bar barObj; 

    //getters and setters 
} 

Теперь всякий раз, когда я называю fooObj.getBarObj().getId() есть прокси-вызов на сервер, чтобы получить значение идентификатора. Я не хочу, чтобы этот вызов состоялся, и хотите, чтобы fooObj был локально сохранен.

ответ

2

Вы можете использовать аргумент аннотации fetch = FetchType.EAGER или выборку с запросом, в котором вы явно говорите «join fetch barObj». В-третьих, вы можете write some code, который достигнет глубокого deproxying. Это, вероятно, лучше всего подходит для ваших нужд, хотя и далеко не тривиально.

+0

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

+0

Затем используйте второе предложение - выборку с помощью запроса HQL, в котором вы явно указываете 'join fetch barObj'. –

+0

Это проблема, связанная с проблемой, поскольку у меня много таких объектов, и мне придется позаботиться о нескольких объединениях. Спасибо в любом случае –

Смежные вопросы