powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение "Библиотека"
13 сообщений из 88, страница 4 из 4
Клиент-серверное приложение "Библиотека"
    #38849570
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тю, так это что Wicket чтоли? LoginPage унаследован от IPage? Если да - то все должно инжектится автоматически, и все эти пляски с созданием контекста выкинуть немеделнно
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849599
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочему ахинею ?

Потому что требуются нечеловеческие усилия для написания простых вещей, все глючит и отваливается внутри каких-то фреймворков, которые интерпретируют xml. Это все лишняя сложность, которая берется из-за оперирования выдуманными сущностями. Вам нужно сделать какую-то формочку для логина, по сути это один html документ, пара http и sql запросов. Все просто и понятно. Теперь вы берете спринг, JSF и hibernate и получаете
авторjava.lang.NoClassDefFoundError: org/springframework/data/config/AuditingHandlerBeanDefinitionParser

Что такое этот AuditingHandlerBeanDefinitionParser? Для чего он нужен? Открываем код и видим:
http://grepcode.com/file/repo1.maven.org/maven2/org.springframework.data/spring-data-commons/1.6.1.RELEASE/org/springframework/data/config/AuditingHandlerBeanDefinitionParser.java
Код: java
1.
2.
3.
0		ParsingUtils.setPropertyValue(builder, element, "set-dates", "dateTimeForNow");
71		ParsingUtils.setPropertyReference(builder, element, "date-time-provider-ref", "dateTimeProvider");
72		ParsingUtils.setPropertyValue(builder, element, "modify-on-creation", "modifyOnCreation");


Это какой-то таинственный говнокод, зачем он нужен и что он делает - загадка.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849698
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никТю, так это что Wicket чтоли? LoginPage унаследован от IPage? Если да - то все должно инжектится автоматически, и все эти пляски с созданием контекста выкинуть немеделнно

Да, оно самое, унаслеловано от WebPage (кстати, может кто-то посоветует для фронт-енда фреймворк более удобный/функционалный). Автоматически не инжектится. Я решил временно забить на этот вопрос. Буду читать книги, делать те задачи в рамках проекта, которые я знаю как делать, а потом разберусь с тем, что сделано временно.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849699
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NeboСамый длинный путь бывает самым коротким)

https://www.youtube.com/user/ytkach
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849865
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вылизал запрос для поиска Читателя по частичным совпадениям (надо бы еще сортировку добавить).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
@Service("readersService")
@Repository
@Transactional
public class ReadersServiceImpl implements ReadersService 
..................................
    @PersistenceContext
    protected EntityManager entityManager;

    public List<ReaderDto> findReaders(ReaderDto readerDto) {

        List<ReaderDomain> listOfReaderRecords;
        StringBuilder sb = new StringBuilder();
        sb.append("select * from reader where ");
        if (readerDto.getId() != null) {
            sb.append("id=").append(readerDto.getId()).append(";");
        } else {
            if (readerDto.getLastName() != null)
                sb.append("lastName like '%").append(readerDto.getLastName()).append("%' ");
            if (readerDto.getFirstName() != null)
                sb.append("firstName like '%").append(readerDto.getFirstName()).append("%' ");
            if (readerDto.getPhone() != null)
                sb.append("phone like '%").append(readerDto.getPhone()).append("%' ");
            if (readerDto.getAddress() != null)
                sb.append("address like '%").append(readerDto.getAddress()).append("%'");
            sb.append(";");
        }

        TypedQuery<ReaderDomain> query = entityManager.createQuery(sb.toString(), ReaderDomain.class);
        listOfReaderRecords = query.getResultList();

        List<ReaderDto> listOfReaders = new ArrayList<>();

        for (ReaderDomain readerDomain : listOfReaderRecords)
            listOfReaders.add(new ReaderDto().convertToDto(readerDomain));

        return  listOfReaders;
    }



Но немного смущают габариты этой функции. Можно ли покороче, при данной поставленной задаче (см. логику построения запроса)
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849887
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да что за бред. Вдруг ни с того ни с сего все запросы на поиск Читателя стали выкидывать исключения.

Last cause: unexpected char: ';' [select * from reader where id=4;]

Я копирую текст запроса в dbForge, там он прекрасно себя чувствует
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849897
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалил ; в конце, теперь вылетает вот такое
Last cause: unexpected token: * near line 1, column 8 [select * from reader where id=6]

Я же когда выкладывал 2-мя сообщениями выше, все норм работало.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849937
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел 2 ошибки у себя.

Во-первых надо пользоваться вот такой штукой
Query query = entityManager.createNativeQuery(sb.toString(), ReaderDomain.class);

а если хочется TypedQuery, то там какой-то другой формат запроса, х. з. какой. Ему и ; и * не нравится

Во-вторых какой-то гемор с кэштрованием. Т. к. я сначала сделал createNativeQuery, а потом в погоне за красотой кода привел его к тому виду, как несколькими сообщениями выше. И какое-то время у меня это работало, похоже из-за кэширования какого-то. А потом перестало работать и я не мог понять почему, ведь я ничего не менял. А на самом деле менял, но полчаса до этого. Очень пренеприятная ситуация возникла. Столько времени потратил на ровном месте из-за чего-то, чего и быть то не должно.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849963
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще больше потратите, пока наконец документацию не прочтете.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850068
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никИ еще больше потратите, пока наконец документацию не прочтете.

Читаю потихоньку. Нашел примеры, как создавать TypedQuery но не вижу большого смысла делать именно таким способом. Все-таки в проекте итак слишком много нового для меня, а какого-то особого преимущества у использования createNamedQuery(java.lang.String s, java.lang.Class<T> aClass); перед
Query createNativeQuery(java.lang.String s, java.lang.Class aClass); я не вижу.В версии 1.0 Я буду делать так, чтобы работало и не было ошибок. Далее следующий шаг это оптимизация и решение той же задачи нескольким другим путем.

Я бы хотел особо отметить, что для меня важно в первую очередь не сделать проект, а чтобы в процессе работы научиться максимуму, что можно выжать из поставленной задачи. Поэтому не вижу ничего зазорного в том, чтобы сделать сначала так, апаралелльно в процессе почитывать/слушать разного рода документацию. И когда все будет более менее красиво работать заняться украшательствами. А пока моей личной оперативной памяти и времени не хватит, чтобы объять столько новых тем.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850748
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До чего же прикольная штука эта JPA persistence. Я замутил SQL запрос такого рода

Код: plsql
1.
2.
3.
SELECT * FROM literarywork l WHERE l.literaryWorkName LIKE '%i%' and l.literaryWorkId = 
(select w.literaryWorkId FROM writerofliterarywork w WHERE w.literaryWorkId = l.literaryWorkId AND 
w.authorId IN ( SELECT authorId FROM writer wr WHERE wr.firstName like '%s%' AND  wr.lastName like '%z%'));



Вызвал Query query = entityManager.createNativeQuery(sb.toString(), LiteraryWorkDomain.class);
List<LiteraryWorkDomain> listOfLiteraryWorksRecords = entityManager.createNativeQuery(sb.toString(), LiteraryWorkDomain.class);

И получил список записей, в каждой из которых кроме полей таблицы literarywork есть поля списков записей из других таблиц, отвечающие критериям запроса. Т. е. Мне не надо делать несколько запросов, типа
1. найти все произведения по названия,
2. найти все произведения по автору,
3. На все книги, содержащие данные произведения.
и не надо разводить при этом зоопарк списков разных сущностей
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850751
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм. в функционалу форума явная дыра. Нету функции редактирования сообщения

в пред. сообщении п. 3 звучит так
3. Найти все книги, содержащие данные произведения.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850804
feomatr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,
Код: sql
1.
2.
3.
SELECT * FROM literarywork l WHERE l.literaryWorkName LIKE '%i%' and l.literaryWorkId = 
(select w.literaryWorkId FROM writerofliterarywork w WHERE w.literaryWorkId = l.literaryWorkId AND 
w.authorId IN ( SELECT authorId FROM writer wr WHERE wr.firstName like '%s%' AND  wr.lastName like '%z%'));




Ваш запрос можно переписать в более удобочитаемом виде:
Код: sql
1.
2.
3.
4.
SELECT l.* FROM literarywork l,  writerofliterarywork w, writer wr 
WHERE  l.literaryWorkId = w.literaryWorkId AND -- соединяем по ID
	w.authorId = wr.authorId  AND -- соединяем по ID
	l.literaryWorkName LIKE '%i%' AND wr.firstName like '%s%' AND  wr.lastName like '%z%';



Или так:
Код: sql
1.
2.
3.
4.
5.
SELECT l.* FROM literarywork l 
	join writerofliterarywork w on l.literaryWorkId = w.literaryWorkId -- соединяем по ID
	join writer wr on w.authorId = wr.authorId -- соединяем по ID
WHERE
	l.literaryWorkName LIKE '%i%' AND wr.firstName like '%s%' AND  wr.lastName like '%z%'
...
Рейтинг: 0 / 0
13 сообщений из 88, страница 4 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение "Библиотека"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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