Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / java вопрос / 7 сообщений из 7, страница 1 из 1
27.08.2014, 18:55
    #38730873
MaxweII
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
День добрый форумчане)
Подскажите плз. Только начал изучать hibernate и Web .
Есть две таблицы в базе данных- Пользователи и контакты. Связь один ко многим. Требуется с помощью hibernate получить таблицу со всеми пользователями и их контактами и вывести данные на jsp страницу в формате пользователь - все его контакты. Просто данные одной таблицы вывести получается. Не получается реализовать при условии у одного пользователя много контактов. Собственно вопрос какой должен быть запрос в хибернейте и как потом вывести это в jsp без дублирования имени, если у одного пользователя два и более контактов. Спасибо)
...
Рейтинг: 0 / 0
27.08.2014, 20:20
    #38730934
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
Так проблема в том, что имя дублируется, или что запрос не работает?
Если первое, то тут вопрос на представление данных, иначе где код запроса, который не работает?
...
Рейтинг: 0 / 0
28.08.2014, 00:40
    #38731034
MaxweII
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
Таблицы

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE SEQUENCE userinc;
CREATE TABLE USERS
  (
     id_user   INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('userinc'),
     firstname VARCHAR(30),
     lastname  VARCHAR(30),
     created   TIMESTAMP DEFAULT NOW()
  )

CREATE SEQUENCE contactinc;
CREATE TABLE CONTACTS
  (
     id_contact INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('contactinc'),
     id_user   INTEGER REFERENCES users (id_user),
     telephone VARCHAR(15),
     email     VARCHAR(30),
     created   TIMESTAMP DEFAULT NOW()
  )



SQL запрос

Код: sql
1.
SELECT FIRSTNAME, LASTNAME, TELEPHONE, EMAIL FROM CONTACTS s INNER JOIN USERS c ON c.id_user=s.id_user



Java DAO

Код: java
1.
2.
3.
4.
	public List<Contact> listContact() {
		return sessionFactory.getCurrentSession().
				createQuery("from Contact c join c.user j").list();
		}



Java Service

Код: java
1.
2.
3.
public List<Contact> listContact(){
		return contactDAO.listContact();
	}



Java Controller

Код: java
1.
2.
3.
4.
    public String listContacts(Map<String, Object> map){
    	map.put("contact", new Contact());
    	map.put("contactList", contactService.listContact());
    	return "home";



JSP

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<body>
<h3><spring:message code="label.contacts" /></h3>
<c:if test="${!empty contactList}">
	<table class="data">
		<tr>
			<th><spring:message code="label.firstname" /></th>
			<th><spring:message code="label.email" /></th>
			<th><spring:message code="label.telephone" /></th>
			<th>&nbsp;</th>
		</tr>
		<c:forEach items="${contactList}" var="contact">
			<tr>
				<td>${user.lastname}, ${user.firstname}</td>
				<td>${contact.email}</td>
				<td>${contact.telephone}</td>
			</tr>
		</c:forEach>
	</table>
</c:if>
</body>
...
Рейтинг: 0 / 0
28.08.2014, 00:48
    #38731043
MaxweII
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
Пробовал так

JSP
Код: java
1.
2.
3.
4.
5.
<tr>
				<td>${contact.user.lastname}, ${contact.user.firstname}</td>
				<td>${contact.email}</td>
				<td>${contact.telephone}</td>
			</tr>



В обоих случаях выходит пустая страница

По поводу представления данных не знаю, как скрыть в JSP повторяющиеся данные. Например
ИМЯТЕЛЕФОН EMAIL"Pavel Ivanov" "546 45 65 aaa@bk.ru""Pavel Ivanov" "453 34 33 aab@bk.ru""Petr Sidorov" "678 65 65 rrr.@lk.ru"
Нужно представить без повторения имен
ИМЯТЕЛЕФОН EMAIL"Pavel Ivanov" "546 45 65 aaa@bk.ru" "453 34 33 aab@bk.ru""Petr Sidorov" "678 65 65 rrr.@lk.ru"
...
Рейтинг: 0 / 0
28.08.2014, 07:50
    #38731118
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
MaxweII,

Все правильно!
Если вы сделаете аналогичный SELECT в БД, то увидите, что данные "дублируются".
Поэтому логику отображения, нужно делать в представлении.
Т.е. когда выводите в цикле таблицу, просто не показывайте "дубли".
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                <c:set prevId=""/>
                <c:forEach items="${contactList}" var="contact">
			<tr>
				<td>
                                      <c:if test="${prevId != user.user_id}">
                                            ${user.lastname}, ${user.firstname}
                                      </c:if>
                                      <c:set prevId="${user.user_id}"/>
                                </td>
				<td>${contact.email}</td>
				<td>${contact.telephone}</td>
			</tr>
		</c:forEach>
...
Рейтинг: 0 / 0
28.08.2014, 08:18
    #38731137
ferc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
а distinct в селекте нельзя чтоль просто написать?
...
Рейтинг: 0 / 0
28.08.2014, 08:41
    #38731149
Zukora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java вопрос
Классически задача решается запоминанием user.lastname, на следующей строке таблицы проверка. Если новое, выводить, такое же подавлять вывод.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / java вопрос / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]