School Exercise (JPQL)
1. Set up the data model as shown in the diagram below.
2. Using JPQL to find solutions to the following challenges:
Part 1:
- Create a ´Populate` class with a main method. In the main method create a method that can populate the database with data.
Part 2:
- Create a
dao
package and add a new interface calledStudentDAO
and add the following code to the interface:
public interface IStudentDAO {
// find all students in the system with the first name Anders
List<Student> findAllStudentsByFirstName(String firstName);
// find all students in the system with the last name And
List<Student> findAllStudentsByLastName(String lastName);
// find the total number of students, for a semester given the semester name as a parameter
long findTotalNumberOfStudentsBySemester(String semesterName);
// find the total number of students that has a particular teacher
long findTotalNumberOfStudentsByTeacher(Teacher teacher);
// find the teacher who teaches the most semesters
Teacher findTeacherWithMostSemesters();
// find the semester that has the fewest students
Semester findSemesterWithFewestStudents();
// find all students, encapsulated as StudentInfo
StudentInfo getAllStudentInfo(int id);
}
-
At the same location add a new class called
StudentDAOImpl
and implement the interface to the class with all the methods. -
In the root of the project add a new class called
Populate
and add the following code to the class:
public class Populate {
public static void main(String[] args) {
EntityManagerFactory emf = HibernateConfig.getEntityManagerFactoryConfig();
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
// populate the database with data
em.getTransaction().commit();
} finally {
em.close();
}
}
}
-
Run the
main
method in the Populate class to populate the database with the students, teachers, and semesters. -
All the methods in the
StudentDAOImpl
class should now be implemented using JPQL.
Part 3:
- Create a StudentInfo class with the following properties:
fullName
studentId
thisSemesterName
thisSemesterDescription
- Add a public constructor that takes all the necessary arguments to initialize the properties.
- Now create a method (using JPQL) with the following signature to return a list of all Students, encapsulated as StudentInfo.
public StudentInfo getAllStudentInfo(int id)
PS. Add the getAllStudentInfo method to the StudentDAO interface and implement it in the StudentDAOImpl class.
Part 4:
-
Create a test class with a test method for each of the methods in the
StudentDAOImpl
class. -
Run the test class and verify that all tests pass.
Good luck!