我正在尝试从一个使用hibernate进行连接的表中获取字段名。有人知道如何获取它吗?我正在使用EntityManager的Spring boot。查询是:
"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
}