实体:考试,成绩,学生,班级
关系:成绩与考试多对一,成绩与学生多对一,学生与班级多对一.
需求:要根据考试id和班级id查询学生成绩.
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();
}
需要注意的是.超过两级级联的时候,需要给一个别名.
即不能直接用student.grade.id,而需要c.createAlias("student.grade", "grade");先给student.grade定义别名(这里定义为grade)
分享到:
相关推荐
"common_ssh"这个文件名可能是某种归档或项目名,与SSH(Secure Shell)协议有关,但在这个上下文中,它与Hibernate级联查询的主题没有直接联系。可能是其他项目的通用配置文件或者库,或者仅仅是上传资料时的一个...
HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...
级联操作虽然方便,但也可能带来性能问题,因为它们可能会触发额外的数据库查询或更新。因此,应根据实际需求谨慎选择级联类型,避免不必要的数据库操作。另外,对于那些不需要立即更新数据库的场景,可以考虑使用...
在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...
本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 首先,级联操作在Hibernate中是一种配置,用于指定当主表中的实体发生变化时,是否以及如何更新或删除关联的从表实体。...
首先,级联查询在Java中通常是通过ORM(对象关系映射)框架,如Hibernate或MyBatis来实现的。级联查询允许我们在一次数据库访问中获取关联对象的数据,而无需多次单独查询。例如,假设我们有一个`User`类和一个`...
一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...
3.3、Hibernate级联关系(Av839011656,P3).mp4
本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
5. **查询和操作**:在使用这些类进行数据操作时,Hibernate会自动处理继承关系。你可以像操作普通实体一样操作这些继承类,例如,通过Session的`save()`, `update()`, `delete()`等方法,以及`Query`或`Criteria` ...
在文档中提到的场景下,我们来详细探讨Hibernate级联删除的原理和配置方法。 首先,我们要理解关系映射中的几个关键概念。在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一...
在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...
第七章_Hibernate_-_级联策略 第七章
在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器交换数据并更新部分网页...
Hibernate的Session接口被用来执行SQL查询或更新,例如获取所有省份、根据省份ID获取城市等。DAO层的设计遵循了单一职责原则,使得代码更易于维护和测试。 `DwrBiz.java`可能引用了Direct Web Remoting (DWR) 框架...
本文档主要讨论了使用Hibernate的HQL(Hibernate Query Language)进行级联查询时需要注意的一些事项。 1. 数据库模型 - `Employee`表:包含`id`(主键)、`empname`(员工姓名)、`empage`(员工年龄)、`context...
Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单