【发布时间】:2015-10-18 13:11:10
【问题描述】:
我有一个
category表。其中前 5 个是主要类别,并且 其他是子类别。
我需要获取前 5 个主要类别的子类别,所以我找到了 sql 查询
SELECT m.category_id,m.category_name AS 'Parent',
e.category_name AS 'Sub'
FROM category e
INNER JOIN category m ON m.category_id = e.parent_category_id
ORDER BY Parent
查询正在加入同一个表本身。并得到下面给出的结果
结果
如何将 SQL 查询转换为 HQL 并将如上图所示的数据返回给用户 标准的json格式?
FetchSubCategory
import java.io.Serializable;
import java.util.Set;
import javax.persistence.*;
@Entity
@Table(name = "category")
public class FetchSubCategory implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "category_id")
private Integer categoryId;
@Column(name = "category_name")
private String categoryName;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "parent_category_id")
private FetchSubCategory parent;
@OneToMany(mappedBy = "parent")
private Set<FetchSubCategory> subCategory;
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public FetchSubCategory getParent() {
return parent;
}
public void setParent(FetchSubCategory parent) {
this.parent = parent;
}
public Set<FetchSubCategory> getSubCategory() {
return subCategory;
}
public void setSubCategory(Set<FetchSubCategory> subCategory) {
this.subCategory = subCategory;
}
}
方法
public Set<FetchSubCategory> fetchSubCategory() throws SQLException, ClassNotFoundException, IOException {
Set<FetchSubCategory> groupList = null;
try {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("SELECT m.categoryName AS 'Parent', e.categoryName AS 'Sub' FROM FetchSubCategory e INNER JOIN FetchSubCategory m ORDER BY Parent");
groupList = (Set<FetchSubCategory>) query.list();
} catch (Exception e) {
e.printStackTrace();
}
return groupList;
}
谁能纠正我的错误并告诉我如何获取如上图所示的结果?
【问题讨论】:
-
你试过什么?您是否阅读过有关 HQL 和连接的文档? docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch16.html
-
请帮我这样做,这样我就可以理解基本步骤,然后按照相同的步骤操作。 @JB 尼泽特
-
StackOverflow 不是一个“请做好我的工作,因为我懒得阅读文档并自己尝试一些东西”的网站。尽你的本分。你可能会……在这个过程中学到一些有用的东西。
-
这不是因为懒惰,我不知道在 Hibernate 中像这些东西一样使用 AS 'Parent' 和 AS 'Sub'。这就是为什么在这里提出我的疑问..我也已经阅读了这些文档。 .
-
您有
@OneToMany(mappedBy = "category"),但在FetchSubCategory类中没有category属性。你的意思可能是@OneToMany(mappedBy = "manager")。按照您构建类的方式,FetchSubCategory的每个实例都包含对其父类别 (manager) 的引用(如果存在)。因此,您甚至不需要执行连接查询。如果您只是解雇from FetchSubCategory where manager is not null order by manager.categoryName,您将获得分配了经理的所有类别。然后,您可以简单地迭代结果,就是这样。
标签: java mysql spring hibernate rest