Hibernate 级联查询

[size=medium]
实体:考试,成绩,学生,班级
关系:成绩与考试多对一,成绩与学生多对一,学生与班级多对一.
需求:要根据考试id和班级id查询学生成绩.
[/size]
Score

@Entity
public class Score {

private int id;

private Student student;

private Exam exam;

private int score;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@ManyToOne
@JoinColumn(name = "studentid", referencedColumnName = "id")
public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

@ManyToOne
@JoinColumn(name = "examid", referencedColumnName = "id")
public Exam getExam() {
return exam;
}

public void setExam(Exam exam) {
this.exam = exam;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

}


Student

private int id;

private Grade grade;

private String name;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@ManyToOne
@JoinColumn(name = "gradeid", referencedColumnName = "id")
public Grade getGrade() {
return grade;
}

public void setGrade(Grade grade) {
this.grade = grade;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}



Exam和Grade略

下面是查询代码.
ScoreDao:

@SuppressWarnings("unchecked")
public List<Score> getList(int examid, int gradeid) {
Criteria c = getSession().createCriteria(Score.class);
c.setFetchMode("exam", FetchMode.JOIN);
c.add(Restrictions.eq("exam.id", examid));
c.createAlias("student.grade", "grade");
c.add(Restrictions.eq("grade.id", gradeid));

return c.list();
}


[size=medium][color=red]需要注意的是.超过两级级联的时候,需要给一个别名.
即不能直接用student.grade.id,而需要c.createAlias("student.grade", "grade");先给student.grade定义别名(这里定义为grade)[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值