JPA NamedQuery 获取不同列

发布于 2024-12-10 12:13:59 字数 581 浏览 0 评论 0原文

我想从我的用户表中获取不同城市的列表。我认为下面的代码可以工作,但给出了一个错误:

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 上尝试了一个城市,但下面一行出现了相同的错误。

我看到了一些例子,但并没有真正告诉我如何使用正确的代码(仅是 SQL 语法)来获取它。

谢谢你的帮助

杰西

I want to get an list of distinct City's from my User table. I thought the code below would work but gives an error:

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

It gives: type mismatch can not convert List to List. I tried two get first user then on getResult a City but same error one line below.

I see some examples but not really tell how to get it with correct code just the SQL syntax.

Thanks for your help

Jess

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

衣神在巴黎 2024-12-17 12:13:59

第一件看起来不太好的事情是,您请求 City 对象,但声明获取 User 对象。

你有:

@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);

The first thing which doesn't look good is that you ask for City objects but declare to get User's.

You have:

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

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

Where it should be:

TypedQuery<City> typedQuery = 
                  entityManager.createNamedQuery("User.all.cities", City.class);
緦唸λ蓇 2024-12-17 12:13:59

有效的代码是:

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

The code that works is:

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() ;
   }
}) ;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文