powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Аннотации на JPA
6 сообщений из 6, страница 1 из 1
Аннотации на JPA
    #38951879
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, всем!
Ребята подскажите пожалуйста как правильно аннотировать.
есть таблица скажем T1 , в нем есть поля (id, name)
так вот в Entity я делаю сам запрос и геттер/сеттер методы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Entity
@Table(name = "T1")
@NamedQueries({ @NamedQuery(name = "T1.findAll", query = "SELECT c FROM T1 c ")}

public class T1{	
    @Id
    @Column(name = "ID")
    private Integer id;

    @Column(name = "NAME")
    private String name;
         
    // Getters and setters are skipped	
}



ну как бы все правильно работает, а вот как поступить если мне нужна получить количество?
т.е. если запрос примерно такой: SELECT COUNT(c.id) AS kolvo FROM T1 c
нужна ли аннотировать kolvo ?
P.S. Но явно не с так на сколько я понимаю: @Column(name = "KOLVO")

Заранее спасибо!
...
Рейтинг: 0 / 0
Аннотации на JPA
    #38951930
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарЗдравствуйте, всем!
Ребята подскажите пожалуйста как правильно аннотировать.
есть таблица скажем T1 , в нем есть поля (id, name)
так вот в Entity я делаю сам запрос и геттер/сеттер методы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Entity
@Table(name = "T1")
@NamedQueries({ @NamedQuery(name = "T1.findAll", query = "SELECT c FROM T1 c ")}

public class T1{	
    @Id
    @Column(name = "ID")
    private Integer id;

    @Column(name = "NAME")
    private String name;
         
    // Getters and setters are skipped	
}



ну как бы все правильно работает, а вот как поступить если мне нужна получить количество?
т.е. если запрос примерно такой: SELECT COUNT(c.id) AS kolvo FROM T1 c
нужна ли аннотировать kolvo ?
P.S. Но явно не с так на сколько я понимаю: @Column(name = "KOLVO")

Заранее спасибо!

Хммм, странно - сущность маппируется на таблицу (поля класса на колонки таблицы).
В данном же случае - kolvo это свойство не сущности, а свойство таблицы + условие WHERE может быть.

Я бы сделал метод, как то так (точно с ходу не помню)

Код: java
1.
2.
3.
4.
public Long count(...) {
    Query q = em.createNamedQuery(queryName);
    return q.q.getSingleResult();
}



И просто обращался бы потом к данному методу
Код: java
1.
Long t1ListCount = t1.count();
...
Рейтинг: 0 / 0
Аннотации на JPA
    #38951942
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мапировать не надо, просто следует использовать другой метод
Код: java
1.
2.
TypedQuery<Integer> countQuery = em.createNamedQuery(blablabla, Integer.class);
Integer count = countQuery.getSingleResult();

Также можно использовать criteria api или hibernate mapping
...
Рейтинг: 0 / 0
Аннотации на JPA
    #38952113
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack, ivanra,
а что если надо немножко иной запрос а точнее вот такой?
Код: plsql
1.
SELECT a.firstname, count(u.login) as kolvo FROM Abiturients a INNER JOIN a.users u WHERE u.iduser = a.users.iduser GROUP BY u.login



такие подходы (которые Вы показали) на сколько подойдет?
...
Рейтинг: 0 / 0
Аннотации на JPA
    #38952377
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар
Код: plsql
1.
SELECT a.firstname, count(u.login) as kolvo FROM Abiturients a INNER JOIN a.users u WHERE u.iduser = a.users.iduser GROUP BY u.login


в hibernate для этого есть ResultTransformer. Создаем объект
Код: java
1.
2.
3.
4.
5.
class AbiturientsAggregate {
  private String firstname;
  private Integer kolvo;
  //getters & setters
}


Наименования полей в этом классе должны совпадать с алиасами в запросе (firstname, kolvo). Этот класс не обязательно должен быть сущностью (@Entity), обычный POJO.
Далее даем hibernate прокастовать результат
Код: java
1.
2.
3.
List<AbiturientsAggregate> list = session.getNamedQuery(queryName)
  .setResultTransformer(Transformers.aliasToBean(AbiturientsAggregate.class))
  .list();


не знаю, получится ли то же самое с TypedQuery<AbiturientsAggregate>, предлагаю попробовать.
В учебнике же предлагается переписать запрос следующим образом
Код: sql
1.
2.
SELECT NEW com.mypackage.AbiturientsAggregate(a.firstname, count(u.login)) 
FROM Abiturients a INNER JOIN a.users u WHERE u.iduser = a.users.iduser GROUP BY u.login

Ну, и не забыть добавить конструктор со всеми полями в AbiturientsAggregate.
То есть тут не важно, какие названия возвращаемых полей, используются их зачения в конструкторе. Мне кажется такой подход немного избыточным, я бы попробовал первый вариант (без изменения запроса), по-моему, должно сработать
...
Рейтинг: 0 / 0
Аннотации на JPA
    #38954840
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
довольна полезная ссылка http://docs.oracle.com/javaee/7/api/javax/persistence/ConstructorResult.html
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Аннотации на JPA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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