JPA NamedQuery得到不同的列

时间:2011-10-18 08:21:10

标签: jpa distinct

我想从我的用户表中获取不同城市的列表。我认为下面的代码可行,但会出错:

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();
...

它给出:类型不匹配无法将List转换为List。我尝试了两个第一个用户然后在getResult一个城市,但同样的错误下面一行。

我看到了一些示例,但并没有真正说明如何使用正确的代码来获取它只是SQL语法。

感谢您的帮助

尔杰斯

2 个答案:

答案 0 :(得分:10)

第一件看起来不太好的事情是你要求City对象,但声明要获得用户。

你有:

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

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

它应该be

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

答案 1 :(得分:-2)

有效的代码是:

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() ;
   }
}) ;