Hibernate查询:从与一侧匹配的多方检索行

时间:2013-10-04 17:54:25

标签: hibernate hql

使用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”。

但我想知道存档的最佳方式。是否可以使用“标准”来做到这一点?或任何其他最好的方式?请指导我。

由于

2 个答案:

答案 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

这是使用标准。