powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL запрос в HQL/Сriteria
75 сообщений из 75, показаны все 3 страниц
SQL запрос в HQL/Сriteria
    #37758789
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблицы
http://img713.imageshack.us/img713/2690/hhhhsm.png
смысл их в том что у пациента есть парамерты здоровья с датами занесения: вес, рост и т.д. и у каждого пациент есть аккаунт. (аккаунт<->пациент один к одному)

Нужно имея только login и password достать все последнии параметры здоровья у пациента.

С SQL достаточно трудно, мне получилось сделать абы как и то только если есть id пациента
Код: plsql
1.
SELECT h.* FROM health h INNER JOIN (SELECT type, MAX(timestamp) AS MaxDateTime FROM health WHERE patientid=0 GROUP BY type) groupedtt ON h.type = groupedtt.type AND h.timestamp = groupedtt.MaxDateTime AND patientid=0



Очень хочу чтобы ктонибудь мне помог сделать HQL/Сriteria

P.S.
Если нужно, выложу код с тестовыми данными
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37758822
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoderОчень хочу чтобы ктонибудь мне помог сделать HQL/Сriteria

Ну, так конвертируйте ваш SQL в свойства и сущности. Если что не получится - спрашивайте.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37758970
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoderС SQL достаточно трудно,
сильно усложняет запросы модель EAV (сущность\атрибут\значение).
Т.е. запись всех разнообразных параметров пациента через универсальные 2 поля TYPE \ VALUE.
В общем случае лучше каждый параметр именовать отдельно и иметь свою собственную размерность.
Но могут быть варианты (форум проектир.БД).
- аккаунт можно занести в Пациент.. и искать по логину\имени\возрасту\адресу. Но не по паролю.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37758982
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую как тут https://forum.hibernate.org/viewtopic.php?p=2317841
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Example ex = Example.create(user);

DetachedCriteria subquery = DetachedCriteria.forClass(Position.class, "last_pos");
subquery.setProjection(Projections.max("last_pos.date"));
subquery.add(Expression.eqProperty("last_pos.userId", "u.id"));

Criteria crit = session.createCriteria(Agent.class, "a")
crit.add(ex);               
crit.createCriteria("positions", "pos");
crit.add(Subqueries.propertyEq("pos.date", subquery));
crit.add(Expression.eq("pos.status", userStatus));

return crit.list();



Делаю
Код: java
1.
2.
3.
4.
5.
		Example ex = Example.create(account);

		DetachedCriteria subquery = DetachedCriteria.forClass(Health.class, "last_date");
		subquery.setProjection(Projections.max("last_date.TIMESTAMP"));
		subquery.add(Expression.eqProperty("last_date.PATIENTID", "patient.id"));


а что дальше?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759066
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, завяз наверно на долго......
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759194
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите где именно ошибка
Вот так пробую только с patient и health (без account).
Т.е. получить все последнии параметры здоровья у пациента который имеет id=1
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		DetachedCriteria subquery = DetachedCriteria.forClass(Health.class, "last_date");
		subquery.setProjection(Projections.max("last_date.TIMESTAMP"));
		subquery.add(Expression.eq("last_date.PATIENTID", "patient.id"));

		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Patient.class);
		criteria.add(Restrictions.eq("id", new Long(1)));
		criteria.createCriteria("healths", "health");
		criteria.add(Subqueries.eq("health.TIMESTAMP", subquery));

                (Set<Health>) criteria.list();


получаю
авторorg.hibernate.MappingException: Unknown entity: null
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759244
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так
Код: java
1.
2.
3.
4.
5.
6.
7.
		DetachedCriteria subquery = DetachedCriteria.forClass(Health.class);
		subquery.setProjection(Projections.max("TIMESTAMP"));
		subquery.add(Expression.eqProperty("PATIENTID", "patient.id"));

		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Patient.class);
		criteria.add(Restrictions.eq("id", new Long(1)));
		criteria.createCriteria("healths").add(Subqueries.eq("TIMESTAMP", subquery));


авторorg.hibernate.QueryException: could not resolve property: TIMESTAMP
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759258
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В HQL и Criteria API используются имена Свойств и Сущностей, а не Таблиц и Колонок. Будьте внимательны в этом вопросе.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759262
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new Long(1) это новый экземпляр на каждый вызов. Long.valueOf или автобоксинг - 1l
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759268
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. А регистр не имеет значения?
2. Чем толком отличается eqProperty от eq?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759270
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВ HQL и Criteria API используются имена Свойств и Сущностей, а не Таблиц и Колонок. Будьте внимательны в этом вопросе.
Проверил, но вроде тоже самое, за исключением регистра
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759271
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder1. А регистр не имеет значения?
имеет

ccoder2. Чем толком отличается eqProperty от eq?
Expression, вроде, deprecated уже. JavaDoc пробовали читать.
eqProperty(propertyName, anotherPropertyName) - сравнивает зачения 2х свойств
eq(propertyName, value) - сравнивает свойство с конкретным значением
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759296
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем вас sql ваш не устраивает? С критериями столько возни что проще заюзать hibernate-transformer - http://www.codereye.com/2010/01/using-hibernate-transformers.html

Кстати вот ваш запрос(добавил вытягивание patientId по login)

Код: plsql
1.
SELECT h.* FROM health h INNER JOIN (SELECT type, MAX(timestamp) AS MaxDateTime FROM health WHERE patientid=(select p.id from PATIENT p join ACCOUNT ac on p.accountid = ac.id where ac.login='login') GROUP BY type) groupedtt ON h.type = groupedtt.type AND h.timestamp = groupedtt.MaxDateTime AND patientid=(select p.id from PATIENT p join ACCOUNT ac on p.accountid = ac.id where ac.login='login')
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759309
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЧем вас sql ваш не устраивает? С критериями столько возни что проще заюзать hibernate-transformer - http://www.codereye.com/2010/01/using-hibernate-transformers.html

+1
Критерии имеет смысл юзать только если запрос нужно в рантайме строить.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759318
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всётаки хочу сделать с критериями
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759466
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		DetachedCriteria subquery = DetachedCriteria.forClass(Health.class);
		subquery.setProjection(Projections.max("timestamp"));
		subquery.add(Expression.eqProperty("patient", "patient.id"));

		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Patient.class);
		criteria.add(Restrictions.eq("id", Long.valueOf(1)));
		criteria.createCriteria("healths").add(Subqueries.eq("timestamp", subquery));
		criteria.add(Subqueries.eq("timestamp", subquery));

return (Set<Health>) criteria.list();


java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
уже просто зеленею
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759492
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, может обернуть sub в new Date() ?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759506
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoderjava.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
уже просто зеленею
A stacktrace?

А почему 2 раза
add(Subqueries.eq("timestamp", subquery));
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759511
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, может обернуть sub в new Date() ?
Кого обернуть?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759512
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timestamp не совсем удачное имя для колонки. Это же тип данных.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759528
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, я предположил относительно java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date )
Что то типа такого или Calendar )

criteria.add(Subqueries.eq("timestamp", DateFormat.parse(subquery))
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759531
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmcriteria.add(Subqueries.eq("timestamp", DateFormat.parse(subquery))
Плачу. Этот код собирает запрос, а не работает во время обработки данных запроса.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759535
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, точно) попытка не пытка)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759550
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, и как же тогда привести тип с подзапросе?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759555
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, может обернуть sub в new Date() ?
Код: java
1.
criteria.createCriteria("healths").add(Subqueries.eq("timestamp", new Date(subquery));


пишет
авторThe method eq(Object, DetachedCriteria) in the type Subqueries is not applicable for the arguments (String, Date)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759564
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, над эти вариантом знающие люди уже поплакали) читай выше)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759577
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, может проще в 2 отдельных запроса? в первом получаешь дату и подставляешь ее во второй запрос.

Код: java
1.
2.
3.
4.
		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Patient.class);
		criteria.add(Restrictions.eq("id", Long.valueOf(1)));
		criteria.createCriteria("healths").add(Restrictions.eq("timestamp", сюда));
		
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759582
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну уж один раз хочу разобраться со сложным случаем
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759601
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так уже близко, но получаю только один результат (а всего должно быть 4)
Код: java
1.
2.
3.
4.
5.
6.
        DetachedCriteria subquery = DetachedCriteria.forClass(Health.class);
        subquery.setProjection(Projections.max("timestamp"));
        subquery.add(Expression.eqProperty("patient", "patient.id"));

        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Health.class);
        criteria.add(Restrictions.eq("patient.id", Long.valueOf(1)));
        criteria.add(Subqueries.propertyEq("timestamp", subquery));
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759614
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, Hibernate же пишет в лог запрос SQL и какие данные он подставил. Там не видно почему только 1?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759622
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, может из-за Long.valueOf(1) ?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759809
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
Subqueries.propertiesEq


авторNote that support for multicolumn subqueries is not implemented until in Hibernate 4.0.0.CR5.
Можно-ли всётаки сделать с criteria query в query?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759838
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ладно с criteria многого наверно не сделать....

Давайте с HQL,
Помогите тогда с
Код: java
1.
2.
3.
4.
5.
6.
7.
		return (Set<Health>) sessionFactory.getCurrentSession().createQuery(
				"FROM health a "+
			    "JOIN patient b ON a.patientID = b.patientID " +
			    "JOIN Account c ON b.accountID = c.ID " +
			    "WHERE c.Password='password' " +
			    "AND c.Login='login' " +
			    "ORDER BY a.timestamp desc").list();


Для начала хочу просто выбрать все healths.

Получаю
авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 30 [FROM health a JOIN patient b ON a.patientID = b.pat
ientID JOIN Account c ON b.accountID = c.ID WHERE c.Password='password' AND c.Login='login' ORDER BY a.timestamp desc]

P.S.
Сами понимаете - сложно
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759856
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, что то не пишет никто( может left join? )
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759862
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm, и опять же как писал Blazkowicz нужно оперировать полями объекта в запросе HQL, а не столбцами таблицы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
return (Set<Health>) sessionFactory.getCurrentSession().createQuery(
				"FROM health a "+
			    "JOIN a.patient as b ON a.patientID = b.patientID " +
			    "JOIN b.account c ON b.accountID = c.ID " +
			    "WHERE c.Password='password' " +
			    "AND c.Login='login' " +
			    "ORDER BY a.timestamp desc").list();
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759864
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серьезно мои ответы не воспринимай)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759873
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 36 [FROM patient b LEFT JOIN Account c ON b.accountID =
c.ID WHERE c.Password='password' AND c.Login='login' ]
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759875
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотябы пациента по аккаунту как получить?

Код: java
1.
2.
3.
4.
5.
6.
sessionFactory.getCurrentSession().createQuery(
				"FROM patient b "+
				"JOIN Account c ON b.accountID = c.ID " +
			    "WHERE c.Password='password' " +
			    "AND c.Login='login' "
				).list()


авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 31 [FROM patient b JOIN Account c ON b.accountID = c.ID
WHERE c.Password='password' AND c.Login='login' ]
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759881
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, вобще параметры в запрос вставляются через setParameter().
Например
Код: java
1.
2.
3.
4.
List<Person> list = sess.createQuery(
    "FROM patient b JOIN Account c ON b.accountID = c.ID WHERE c.Password= :password AND c.Login= :login ")
    .setParameter("password", password).setParameter("login", login).
    .list();  
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759894
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с JOIN что делать?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759915
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, во-первых вместо "JOIN Account c" как я понимаю надо "b.account as c" соблюдая регистр. При это в классе patient должно быть поле account.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759917
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе мне кажется гораздо быстрее и правильнее ответили, если бы ты привел пример классов и как они замаплены в БД
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759918
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, во-первых вместо "JOIN Account c" как я понимаю надо "left join b.account as c" соблюдая регистр. При это в классе patient должно быть поле account.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759925
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так получилось
Код: java
1.
2.
3.
4.
5.
		return (Set<Health>) sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+		    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list();


т.е. эта часть работает

Далее пробую
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+
				"INNER JOIN "+
						"(SELECT type, MAX(timestamp) AS MaxDateTime FROM a WHERE a.patient.account.login='test@mail.com' " +
					    "AND a.patient.account.password='aaaa' " +
						"BY type) groupedtt " +
					    "ON a.type = groupedtt.type "+
						"AND a.timestamp = groupedtt.MaxDateTime " +			    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list()


Получаю
авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 53 [FROM lt.webmedia.eHealth.domain.Health a INNER JOIN
(SELECT type, MAX(timestamp) AS MaxDateTime FROM a WHERE AND a.patient.account.login='test@mail.com' AND a.patient.account.password='aaaa'
BY type) groupedttON a.type = groupedtt.type AND a.timestamp = groupedtt.MaxDateTimeWHERE a.patient.account.login='test@mail.com' AND a.pati
ent.account.password='aaaa' ]

Какие части у меня не сосуществуют HQL?
Брал я с рабочего SQL
Код: sql
1.
SELECT h.* FROM health h INNER JOIN (SELECT type, MAX(timestamp) AS MaxDateTime FROM health WHERE patientid=0 GROUP BY type) groupedtt ON h.type = groupedtt.type AND h.timestamp = groupedtt.MaxDateTime AND patientid=0



P.S.
Мне нужно выбрать все здоровья пациента с последними датами(по одной на параметр) имея логин и пароль(с account таблицы)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759938
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, попробуй SELECT type, MAX(timestamp) AS MaxDateTime FROM Health a
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759942
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще ты order не забыл в подзапросе?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759945
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+
				"INNER JOIN "+
						"SELECT type, MAX(timestamp) AS MaxDateTime FROM a WHERE a.patient.account.login='test@mail.com' " +
					    "AND a.patient.account.password='aaaa' " +
						"BY type groupedtt " +
					    "ON a.type = groupedtt.type "+
						"AND a.timestamp = groupedtt.MaxDateTime " +			    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list()


авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: SELECT near line 1, column 53
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759948
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmи еще ты order не забыл в подзапросе?
Не нужно, так как мне нужны все только последнии параметры одного пациента. Т.е. по одному параметру от каждого типа и чтобы каждый был с последней датой из своей группы (а группируются типу)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759960
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, эх. Надо чтоб знающий человек ответил)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759966
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoderrdmи еще ты order не забыл в подзапросе?
Не нужно, так как мне нужны все только последнии параметры одного пациента. Т.е. по одному параметру от каждого типа и чтобы каждый был с последней датой из своей группы (а группируются типу)
а group не забыл? )
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759973
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoderпропущено...

Не нужно, так как мне нужны все только последнии параметры одного пациента. Т.е. по одному параметру от каждого типа и чтобы каждый был с последней датой из своей группы (а группируются типу)
а group не забыл? )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+
				"INNER JOIN "+
						"SELECT type, MAX(timestamp) AS MaxDateTime FROM a WHERE a.patient.account.login='test@mail.com' " +
					    "AND a.patient.account.password='aaaa' " +
						" GROUP BY type groupedtt " +
					    "ON a.type = groupedtt.type "+
						"AND a.timestamp = groupedtt.MaxDateTime " +			    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list()


но
авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: SELECT near line 1, column 53
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759980
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, подзапрос в скобки наверно)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759982
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, подзапрос в скобки наверно)
Постом-два выше было так (мне просто написали чтобы убрать)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759985
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, параметры через setParametr() ? Пальцем в небо)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759987
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, параметры через setParametr() ? Пальцем в небо)
Это потом
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37759998
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, посмотри внизу тут может поможет
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760004
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmccoder, посмотри внизу тут может поможет
там тотже SQL, с которым у меня получается выполнить
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760023
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, "SELECT type, MAX(timestamp) AS MaxDateTime" - мне кажется это все неправильно! опять же через поля обьектов надо типа a.type, MAX (a.timestamp)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760027
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GROUP BY a.type опять же
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760041
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+
				"INNER JOIN "+
						"(SELECT a.type, MAX(a.timestamp) AS MaxDateTime FROM a WHERE a.patient.account.login='test@mail.com' " +
					    "AND a.patient.account.password='aaaa' " +
						"BY a.type) groupedtt " +
					    "ON a.type = groupedtt.type "+
						"AND a.timestamp = groupedtt.MaxDateTime " +			    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list()


авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 53
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760062
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT a.type, ... FROM a WHERE ... BY a.type

group by :)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760079
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+
				"INNER JOIN "+
						"(SELECT a.type, MAX(a.timestamp) AS MaxDateTime FROM a WHERE a.patient.account.login='test@mail.com' " +
					    "AND a.patient.account.password='aaaa' " +
						"GROUP BY a.type) groupedtt " +
					    "ON a.type = groupedtt.type "+
						"AND a.timestamp = groupedtt.MaxDateTime " +			    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' "
			    ).list()


авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 53
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760100
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, попробуй вместо куска "GROUP BY a.type) groupedtt" кусок "GROUP BY a.type) as groupedtt"
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760105
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут накопал что в FROM такое дело в HQL нельзя писать. А где незнаю.....
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760110
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, отлично, можно посмотреть футбол!
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760141
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсталось GROUP BY добить

Вот так работает (без)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+		    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' " +
				
				"AND a.timestamp = (SELECT MAX(a.timestamp) FROM a WHERE a.patient.account.login='test@mail.com' " +
				"AND a.patient.account.password='aaaa')"
			    ).list()


а так нет
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
sessionFactory.getCurrentSession().createQuery(
				"FROM Health a "+		    
				"WHERE a.patient.account.login='test@mail.com' " +
			    "AND a.patient.account.password='aaaa' " +
				
				"AND a.timestamp = (SELECT MAX(a.timestamp) FROM a WHERE a.patient.account.login='test@mail.com' " +
				"AND a.patient.account.password='aaaa' GROUP BY a.type)"
			    ).list()


авторorg.hibernate.hql.ast.QuerySyntaxException: unexpected token: a near line 1, column 126
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760150
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder, добавь в SELECT a.type
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37760151
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче ладно хватит...
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37766715
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Былобы просто написать .createSQLQuery("select...") и потом .setResultTransformer(Transformers.aliasToBean(MyEnt.class)) и не парить мозг с сложными запросами.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37767505
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabБылобы просто написать .createSQLQuery("select...") и потом .setResultTransformer(Transformers.aliasToBean(MyEnt.class)) и не парить мозг с сложными запросами.

И что потом с этим добром делать? Просто показывать без возможности редактирования?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37769604
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJmjabБылобы просто написать .createSQLQuery("select...") и потом .setResultTransformer(Transformers.aliasToBean(MyEnt.class)) и не парить мозг с сложными запросами.

И что потом с этим добром делать? Просто показывать без возможности редактирования?

А как это влияет? В обоих вариантах вернется объект одного и того же типа.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37769661
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никAlexJmпропущено...


И что потом с этим добром делать? Просто показывать без возможности редактирования?

А как это влияет? В обоих вариантах вернется объект одного и того же типа.
Ну так поэтому и спросил - что с ним дальше-то делать?
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37772846
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А дальше есть в твоем DAO методы записи, в которые передаешь, то что надо записать. Одно другому не помеха.
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37773401
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabА дальше есть в твоем DAO методы записи, в которые передаешь, то что надо записать. Одно другому не помеха.
Просто не думал, что на полученной таким путем Entity merge будет работать. Однако работает :)
...
Рейтинг: 0 / 0
SQL запрос в HQL/Сriteria
    #37773519
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJmjabА дальше есть в твоем DAO методы записи, в которые передаешь, то что надо записать. Одно другому не помеха.
Просто не думал, что на полученной таким путем Entity merge будет работать. Однако работает :)

Странно, вроде должно быть очевидно, что entityManager побоку на то как была создана сущность, главное чтобы она была аннтоирована @Entity - иначе как бы можно было сохранить новый объект?
...
Рейтинг: 0 / 0
75 сообщений из 75, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL запрос в HQL/Сriteria
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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