使用hibernate从数据库中检索记录时遇到问题。情况就是这样。 我有3个班级(还有3个班级)。
这些是我的课程。
Exam
-----
Integer exam_id
String exam_name
Subject
-------
Integer subject_id,
String subject_name
Scores
-------
Exam exam,
Subject subject,
Integer score
这些是我的表
Exam
-----
exam_id,
exam_name
Subject
-------
subject_id,
subject_name
Scores
-------
exam_id,
subject_id,
score
我想要做的是,我想要检索科学科目的所有分数。我认为可以使用这个SQL查询来做到这一点。
从Scores sc内部联接主题su中选择sc。* sc.subject_id = su.subject_id其中su.subject_name =“science”。
但我想知道存档的最佳方式。是否可以使用“标准”来做到这一点?或任何其他最好的方式?请指导我。
由于
答案 0 :(得分:1)
Hibernate是一种ORM技术。如果你有这样的PK / FK相关表,你应该通过XML配置或基于注释的映射告诉Hibernate它们。然后,您可以通过类似的HQL查询获得结果;
from Scores sc where sc.subject.subjectName="science"
我假设Scores表和Subject表与subject_id列相关。所以,你的课应该是这样的;
class Scores{
Subject subject;
Exam exam;
int score;
// getters and setters
}
class Subject{
int subjectId;
String subjectName;
// getters and setters
}
class Exam{
int examId;
String examName;
// getters and setters
}
然后你可以使用Scores对象的主题字段来达到分数。
答案 1 :(得分:1)
是的,您可以使用条件,但使用简单的HQL查询更简单。
CriteriaBuilder cb = em.getCriteriaBuilder(); //em is the entity manager
CriteriaQuery<Scores> criteriaQuery = cb.createQuery(Scores.class);
Root<Scores> scoreRoot = criteriaQuery.from(Scores.class);
Subquery<Integer> subquery = criteriaQuery.subquery(Integer.class);
Root root = subquery.from(Subject.class);
subquery.select(root.get("subject_id"));
subquery.where(cb.equal(root.get("subject_name"), "science"));
criteriaQuery.where(cb.equal(scoreRoot.get("subject_id"),subquery));
TypedQuery<Score> query = em.createQuery(criteriaQuery);
return query.getResultList(); //this is the result
这是使用标准。