У меня есть запрос SQL, который производит результат, что мне нужно:Преобразование сложных SQL в HQL?
SELECT m.category_id,m.category_name,
e.category_name
FROM category e
INNER JOIN category m ON m.category_id = e.parent_category_id
ORDER BY m.category_name
Как я могу преобразовать это в HQL?
Категория Таблица
Фактический результат После выполнения запроса
Mapping класс
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;
@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;
@NotFound(action = NotFoundAction.IGNORE)
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "parent_category_id")
private FetchSubCategory parent;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", cascade = CascadeType.ALL)
private List<FetchSubCategory> subCategory;
public List<FetchSubCategory> getSubCategory() {
return subCategory;
}
public void setSubCategory(List<FetchSubCategory> subCategory) {
this.subCategory = 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 List<FetchSubCategory> fetchSubCategory() throws SQLException, ClassNotFoundException, IOException {
List<FetchSubCategory> groupList = null;
try {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("FROM FetchSubCategory e INNER JOIN e.subCategory m ORDER BY m.parent");
groupList = query.list();
} catch (Exception e) {
e.printStackTrace();
}
return groupList;
}
Ранее я задал вопрос, связанный с этим, и я не получил ответ, я застрял полностью.
Из вашего запроса я могу видеть, что вы хотите только parent.id, родитель .name и child.name, но в вашей попытке HQL вы ожидаете объекты FetchSubCategory. Что вы действительно хотите? – luksch
Возможный дубликат [Hibernate: self join confusion?] (Http://stackoverflow.com/questions/31668522/hibernate-self-join-confusion) – kryger
У меня нет ответа на это. Вот почему я спросил с небольшим бит объяснил больше .. не делай этого, это увязло с этим. – Stella