2010-07-29 3 views
1

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

я в настоящее время есть два лица, которые выглядят следующим образом (не соответствующие детали опущены):

Article.java 

@Entity 
Article 

@Id 
private int article_id 

@ManyToOne 
@JoinColumn(name="user_id") 
private User user; 

User.java 
@Entity 
User 

@Id 
private int user_id 

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

Я экспериментировал с @OneToMany отношений в каждом объекте с опцией каскадного каждая ссылка в статье и пользователя для обновления объекта я назвал User_Article (который имеет только две колонки, article_id и user_id), однако, я продолжаю получать LazyInitilizationException Когда происходит каскад?

Я ищу любых гибернативных гуру для руководства по реализации и архитектуре по этой проблеме.

ответ

1

Попробуйте

@OneToMany(fetch=FetchType.EAGER) 

Однако, это хорошо, чтобы избежать жадной загрузки больших коллекций. Поэтому оставляйте его ленивым и инициализируйте его с помощью Hibernate.initialize(..) только тогда, когда вы уверены, что вам это понадобится. Или используйте запрос HQL:

SELECT entity FROM Entity entity JOIN entity.collection 
+0

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

+0

см. Мое обновление .. – Bozho

+0

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

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