gpt4 book ai didi

hibernate - 使用计数从 hibernate 实体获取行并加入

转载 作者:行者123 更新时间:2023-12-04 13:35:33 24 4
gpt4 key购买 nike

我正在尝试从一个使用 hibernate 连接的表中获取字段名称。有人知道如何获得吗?我正在将 Spring Boot 与 EntityManager 一起使用。查询是:

"SELECT COUNT(post_id), t.name" +
" FROM TagsPosts tp" +
" JOIN Tags t" +
" WHERE t.id = tp.tags_id" +
" GROUP BY tags_id" +
" ORDER BY 1 DESC"

我试过这个代码
        Query query = entityManager.createQuery(
"SELECT COUNT(post_id), t.name" +
" FROM TagsPosts tp" +
" JOIN Tags t" +
" WHERE t.id = tp.tags_id" +
" GROUP BY tags_id" +
" ORDER BY 1 DESC");
query.setMaxResults(10);
for (Object queryResult: query.getResultList()) {
...


但它不起作用。

最佳答案

这取决于您映射到的 java 对象的方式。在 JPQL 中,您必须引用 java 对象字段名称而不是实际的数据库列名称。假设您有以下映射:

@Entity
@Table(name= "Tag")
public class Tag {

@Column(name="name")
private String name;

@OneToMany / @ManyToMany
private List<Post> posts;
}

@Entity
@Table(name= "Post")
public class Post {


}

JPQL 是:
select tag.name , count(post)
from Tag tag
join tag.posts post
group by tag
order by count(post)

返回的对象是 Object[]其中第 0 个索引是标签名称,而第 1 个索引是使用此标签名称标记的帖子数。

TypedQuery<Object[]> query = entityManager.createQuery(queryStr, Object[].class)    
query.setMaxResults(10);
for (Object[] queryResult: query.getResultList()) {
//queryResult[0] is tag.name
//queryResult[1] is total count of the post for this tag
}

关于hibernate - 使用计数从 hibernate 实体获取行并加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62239767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com