JPA NamedQuery получить отдельный столбец - PullRequest
0 голосов
/ 18 октября 2011

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

User.java
@Entity
@Table(name="user_info")
...
@NamedQuery(name = "User.all.cities", query = "SELECT distinct u.city FROM User u"),
...
@embedded
private City city;

UserBusinessLogic.java:
...
TypedQuery<City> typedQuery = entityManager.createNamedQuery("User.all.cities",User.class);
List<City> names = typedQuery.getResultList();
...

Это дает: несоответствие типов не может преобразовать список в список. Я попытался два получить первый пользователь затем на getResult a City, но та же ошибка на одну строку ниже.

Я вижу некоторые примеры, но на самом деле не говорю, как получить его с правильным кодом, только синтаксис SQL.

Спасибо за вашу помощь

Jess

Ответы [ 2 ]

10 голосов
/ 18 октября 2011

Первое, что не очень хорошо выглядит, это то, что вы запрашиваете объекты City, но заявляете, что хотите получить пользовательские.

У вас есть:

@NamedQuery(name = "User.all.cities", 
            query = "SELECT distinct u.city FROM User u"),

TypedQuery<City> typedQuery = 
                  entityManager.createNamedQuery("User.all.cities", User.class);

Где это должно быть :

TypedQuery<City> typedQuery = 
                  entityManager.createNamedQuery("User.all.cities", City.class);
0 голосов
/ 01 ноября 2011

Код, который работает:

results = getJpaTemplate().execute(new JpaCallback<List<City>>() {
  @Override
  public List<City> doInJpa(EntityManager em) throws PersistenceException {
    TypedQuery<City> query = em.createNamedQuery("User.all.cities", City.class);
    return query.getResultList() ;
   }
}) ;
...