├── .gitignore
├── .idea
├── .gitignore
├── compiler.xml
├── dbnavigator.xml
├── encodings.xml
├── google-java-format.xml
├── jarRepositories.xml
├── misc.xml
├── uiDesigner.xml
└── vcs.xml
├── README.md
├── jpatutorial.iml
├── pom.xml
└── src
├── main
├── java
│ └── org
│ │ └── tutorial
│ │ ├── App.java
│ │ ├── model
│ │ ├── Person.java
│ │ ├── School.java
│ │ ├── Student.java
│ │ ├── Teacher.java
│ │ └── Tutor.java
│ │ └── repository
│ │ ├── SchoolRepository.java
│ │ ├── StudentRepository.java
│ │ ├── TeacherRepository.java
│ │ └── TutorRepository.java
└── resources
│ └── META-INF
│ └── persistence.xml
└── test
├── java
└── org
│ └── tutorial
│ ├── AppTest.java
│ └── StudentRepositoryTest.java
└── resources
└── META-INF
└── persistence.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/*
2 | jpatutorial.iml
3 | target
4 | .idea
5 | target/*
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/dbnavigator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/google-java-format.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/uiDesigner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
8 | -
9 |
10 |
11 | -
12 |
13 |
14 | -
15 |
16 |
17 | -
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
26 |
27 |
28 |
29 | -
30 |
31 |
32 |
33 |
34 |
35 | -
36 |
37 |
38 |
39 |
40 |
41 | -
42 |
43 |
44 |
45 |
46 | -
47 |
48 |
49 |
50 |
51 | -
52 |
53 |
54 |
55 |
56 | -
57 |
58 |
59 |
60 |
61 | -
62 |
63 |
64 |
65 |
66 | -
67 |
68 |
69 |
70 |
71 | -
72 |
73 |
74 | -
75 |
76 |
77 |
78 |
79 | -
80 |
81 |
82 |
83 |
84 | -
85 |
86 |
87 |
88 |
89 | -
90 |
91 |
92 |
93 |
94 | -
95 |
96 |
97 |
98 |
99 | -
100 |
101 |
102 | -
103 |
104 |
105 | -
106 |
107 |
108 | -
109 |
110 |
111 | -
112 |
113 |
114 |
115 |
116 | -
117 |
118 |
119 | -
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # jpatutorial
2 |
3 | Complete Java Persistence API (JPA) Tutorial.
4 |
5 | The Java Persistence API (JPA) is a Java specification for accessing, persisting, and managing data between Java objects / classes and a relational database. JPA was defined as part of the EJB 3.0 specification as a replacement for the EJB 2 CMP Entity Beans specification. JPA itself is just a specification, not a product; it cannot perform persistence or anything else by itself. JPA is just a set of interfaces, and requires an implementation.
6 |
7 |
8 |
11 |
--------------------------------------------------------------------------------
/jpatutorial.iml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 | 4.0.0
6 |
7 | org.tutorial
8 | jpa
9 | 1.0-SNAPSHOT
10 |
11 | jpa
12 |
13 |
14 | UTF-8
15 | 1.8
16 | 1.8
17 |
18 |
19 |
20 |
21 | junit
22 | junit
23 | 4.11
24 | test
25 |
26 |
27 | org.hibernate
28 | hibernate-core
29 | 5.4.18.Final
30 |
31 |
32 | com.h2database
33 | h2
34 | 1.4.200
35 |
36 |
37 | org.postgresql
38 | postgresql
39 | 42.2.14
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | maven-clean-plugin
50 | 3.1.0
51 |
52 |
53 |
54 | maven-resources-plugin
55 | 3.0.2
56 |
57 |
58 | maven-compiler-plugin
59 | 3.8.0
60 |
61 |
62 | maven-surefire-plugin
63 | 2.22.1
64 |
65 |
66 | maven-jar-plugin
67 | 3.0.2
68 |
69 |
70 | maven-install-plugin
71 | 2.5.2
72 |
73 |
74 | maven-deploy-plugin
75 | 2.8.2
76 |
77 |
78 |
79 | maven-site-plugin
80 | 3.7.1
81 |
82 |
83 | maven-project-info-reports-plugin
84 | 3.0.0
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/App.java:
--------------------------------------------------------------------------------
1 | package org.tutorial;
2 |
3 | import org.tutorial.model.School;
4 | import org.tutorial.model.Student;
5 | import org.tutorial.model.Teacher;
6 | import org.tutorial.model.Tutor;
7 | import org.tutorial.repository.SchoolRepository;
8 | import org.tutorial.repository.StudentRepository;
9 | import org.tutorial.repository.TeacherRepository;
10 | import org.tutorial.repository.TutorRepository;
11 |
12 | import java.util.List;
13 |
14 |
15 | public class App {
16 | public static void main(String[] args) {
17 |
18 | Student student = new Student("Alan", "Red");
19 |
20 | //REPOSITORIES
21 |
22 | StudentRepository studentRepository = new StudentRepository();
23 |
24 | SchoolRepository schoolRepository = new SchoolRepository();
25 |
26 | TutorRepository tutorRepository = new TutorRepository();
27 |
28 | TeacherRepository teacherRepository = new TeacherRepository();
29 |
30 | //ADD STUDENT
31 |
32 | studentRepository.add(student);
33 |
34 | System.out.println("Added student " + student.toString());
35 |
36 | //ADD TUTOR
37 |
38 | Tutor tutor = new Tutor("FirstName_tutor_1", "LastName_tutor_2");
39 |
40 | tutorRepository.add(tutor);
41 |
42 | System.out.println("Added tutor " + tutor.toString());
43 |
44 | studentRepository.addTutor(student.getId(), tutor);
45 |
46 | System.out.println("Student with tutor " + student.toString());
47 |
48 | System.out.println("Found student with school " + student.toString());
49 |
50 | //ADD SCHOOL
51 |
52 | School school = new School("School_1","City_1");
53 |
54 | schoolRepository.add(school);
55 |
56 | System.out.println("Added school " + school.toString());
57 |
58 | school = schoolRepository.find(school.getId());
59 |
60 | school.getStudents().forEach(System.out::println);
61 |
62 | school = schoolRepository.find(school.getId());
63 |
64 | school.getStudents().forEach(System.out::println);
65 |
66 | //ADD TEACHER
67 |
68 | Teacher teacher = new Teacher("firstname_1","lastname_1");
69 |
70 | teacher.addStudent(new Student("SFirstName_1", "SLastname_1"));
71 | teacher.addStudent(new Student("SFirstName_2", "SLastname_2"));
72 |
73 | teacherRepository.add(teacher);
74 |
75 | //Persistence Operations and JPQL
76 |
77 | studentRepository.findFirstNames().forEach(System.out::println);
78 |
79 | studentRepository.findLastNames().forEach(System.out::println);
80 |
81 | student = studentRepository.find(student.getId());
82 |
83 | System.out.println("Found student " + student.toString());
84 |
85 | student = studentRepository.findById(student.getId());
86 |
87 | System.out.println("Found student (JPQL) " + student.toString());
88 |
89 | student.setLastName("Green");
90 |
91 | studentRepository.update(student);
92 |
93 | System.out.println("Updated student " + student.toString());
94 |
95 | student = studentRepository.updateFirstNameById("Fred", student.getId());
96 |
97 | System.out.println("Updated first name (JPQL)" + student.toString());
98 |
99 | student = studentRepository.updateLastNameById("Yellow", student.getId());
100 |
101 | System.out.println("Updated last name (JPQL)" + student.toString());
102 |
103 | List students = studentRepository.findByFirstNameStartWith("Fr");
104 |
105 | students.forEach(System.out::println);
106 |
107 | students = studentRepository.findByLastNameEndWith("ow");
108 |
109 | students.forEach(System.out::println);
110 |
111 | System.out.println("Number of student(s): "+ studentRepository.count());
112 |
113 | students = studentRepository.findSortingByFirstName();
114 |
115 | students.forEach(System.out::println);
116 |
117 | students = studentRepository.findSortingById();
118 |
119 | students.forEach(System.out::println);
120 |
121 | //repository.delete(student);
122 |
123 | //System.out.println("Deleted student " + student.toString());
124 |
125 |
126 | //CRITERIA BUILDER
127 |
128 | List studentList = studentRepository.getStudentWithCriteriaBuilder();
129 |
130 | System.out.println("Print Students (Criteria Builder): ");
131 | studentList.forEach(System.out::println);
132 |
133 | List studentListWhere = studentRepository.getStudentsWithWHEREFirstName();
134 |
135 | System.out.println("Print Students (Criteria Builder with WHERE and GROUP BY): ");
136 | studentListWhere.forEach(System.out::println);
137 |
138 | studentRepository.close();
139 |
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/model/Person.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.model;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | @Table
7 | @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
8 | public class Person {
9 |
10 | @Id
11 | @GeneratedValue(strategy = GenerationType.AUTO)
12 | private Long id;
13 |
14 | @Column(name = "first_name", nullable = false, length = 150)
15 | private String firstName;
16 |
17 | @Column(name = "last_name", nullable = false, length = 250)
18 | private String lastName;
19 |
20 | public Person(String firstName, String lastName) {
21 | this.firstName = firstName;
22 | this.lastName = lastName;
23 | }
24 |
25 | public Person() {
26 | }
27 |
28 | public Long getId() {
29 | return id;
30 | }
31 |
32 | public void setId(Long id) {
33 | this.id = id;
34 | }
35 |
36 | public String getFirstName() {
37 | return firstName;
38 | }
39 |
40 | public void setFirstName(String firstName) {
41 | this.firstName = firstName;
42 | }
43 |
44 | public String getLastName() {
45 | return lastName;
46 | }
47 |
48 | public void setLastName(String lastName) {
49 | this.lastName = lastName;
50 | }
51 |
52 | @Override
53 | public String toString() {
54 | return "{" +
55 | "id=" + id +
56 | ", firstName='" + firstName + '\'' +
57 | ", lastName='" + lastName + '\'' +
58 | '}';
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/model/School.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.model;
2 |
3 | import javax.persistence.*;
4 | import java.util.HashSet;
5 | import java.util.Set;
6 |
7 | @Entity
8 | public class School {
9 |
10 | @Id
11 | @GeneratedValue(strategy = GenerationType.AUTO)
12 | private Long id;
13 | private String name;
14 | private String city;
15 |
16 | @OneToMany(targetEntity = Student.class)
17 | private Set students = new HashSet<>();
18 |
19 | public School(String name, String city) {
20 | this.name = name;
21 | this.city = city;
22 | }
23 |
24 | public School() {
25 | }
26 |
27 | public Long getId() {
28 | return id;
29 | }
30 |
31 | public void setId(Long id) {
32 | this.id = id;
33 | }
34 |
35 | public String getName() {
36 | return name;
37 | }
38 |
39 | public void setName(String name) {
40 | this.name = name;
41 | }
42 |
43 | public String getCity() {
44 | return city;
45 | }
46 |
47 | public void setCity(String city) {
48 | this.city = city;
49 | }
50 |
51 | @Override
52 | public String toString() {
53 | return "School{" +
54 | "id=" + id +
55 | ", name='" + name + '\'' +
56 | ", city='" + city + '\'' +
57 | '}';
58 | }
59 |
60 | public Set getStudents() {
61 | return students;
62 | }
63 |
64 | public void setStudents(Set students) {
65 | this.students = students;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/model/Student.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.model;
2 |
3 | import javax.persistence.*;
4 | import java.util.HashSet;
5 | import java.util.Set;
6 |
7 | @Entity
8 | @NamedQuery(name = "find student by id" ,query = "Select s from Student s where s.id = :id")
9 | public class Student extends Person{
10 |
11 | @OneToOne
12 | private Tutor tutor;
13 |
14 | @ManyToMany(mappedBy = "students")
15 | private Set teachers = new HashSet<>();
16 |
17 | public Student(String firstName, String lastName) {
18 | super(firstName, lastName);
19 | }
20 |
21 | public Student() {
22 | }
23 |
24 | public void setTutor(Tutor tutor) {
25 | this.tutor = tutor;
26 | }
27 |
28 | public Tutor getTutor() {
29 | return tutor;
30 | }
31 |
32 | public void addTeacher(Teacher teacher) {
33 | boolean added = teachers.add(teacher);
34 | if (added) {
35 | teacher.getStudents().add(this);
36 | }
37 | }
38 |
39 | public void removeTeacher(Teacher teacher) {
40 | boolean remove = teachers.remove(teacher);
41 | if (remove) {
42 | teacher.getStudents().remove(this);
43 | }
44 | }
45 |
46 | public Set getTeachers() {
47 | return teachers;
48 | }
49 |
50 | public void setTeachers(Set teachers) {
51 | this.teachers = teachers;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/model/Teacher.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.model;
2 |
3 | import javax.persistence.*;
4 | import java.util.HashSet;
5 | import java.util.Set;
6 |
7 | @Entity
8 | public class Teacher extends Person{
9 |
10 | @ManyToOne
11 | private School school;
12 |
13 | @ManyToMany(cascade = {
14 | CascadeType.PERSIST,
15 | CascadeType.MERGE
16 | })
17 | @JoinTable(
18 | name = "teachers_students",
19 | joinColumns = { @JoinColumn(name = "teacher_id") },
20 | inverseJoinColumns = { @JoinColumn(name = "student_id") },
21 | uniqueConstraints = {
22 | @UniqueConstraint(
23 | columnNames = { "teacher_id", "student_id" }
24 | )
25 | }
26 |
27 | )
28 | private Set students = new HashSet<>();
29 |
30 | public Teacher(String firstName, String lastName) {
31 | super(firstName, lastName);
32 | }
33 |
34 | public Teacher() {
35 | }
36 |
37 | public School getSchool() {
38 | return school;
39 | }
40 |
41 | public void setSchool(School school) {
42 | this.school = school;
43 | }
44 |
45 | public void addStudent(Student student) {
46 | boolean added = students.add(student);
47 | if(added) {
48 | student.getTeachers().add(this);
49 | }
50 | }
51 |
52 | public void removeStudent(Student student) {
53 | boolean removed = students.remove(student);
54 | if(removed) {
55 | student.getTeachers().remove(this);
56 | }
57 | }
58 |
59 | public Set getStudents() {
60 | return students;
61 | }
62 |
63 | public void setStudents(Set students) {
64 | this.students = students;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/model/Tutor.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.model;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class Tutor extends Person {
7 | public Tutor(String firstName, String lastName) {
8 | super(firstName, lastName);
9 | }
10 |
11 | public Tutor() {
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/repository/SchoolRepository.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.repository;
2 |
3 | import org.tutorial.model.School;
4 |
5 | import javax.persistence.EntityManager;
6 | import javax.persistence.EntityManagerFactory;
7 | import javax.persistence.Persistence;
8 |
9 | public class SchoolRepository {
10 |
11 | private EntityManager entityManager;
12 | private EntityManagerFactory emf;
13 |
14 | public SchoolRepository() {
15 | this.emf = Persistence.createEntityManagerFactory("student_pu");
16 | this.entityManager = this.emf.createEntityManager();
17 | }
18 |
19 | public SchoolRepository(String pu) {
20 | this.emf = Persistence.createEntityManagerFactory(pu);
21 | this.entityManager = this.emf.createEntityManager();
22 | }
23 |
24 | public School add(School school) {
25 | entityManager.getTransaction().begin();
26 | entityManager.persist(school);
27 | entityManager.getTransaction().commit();
28 | return school;
29 | }
30 |
31 | public School find(Long id) {
32 | return entityManager.find(School.class, id);
33 | }
34 |
35 | public School update(School school) {
36 | School schoolToUpdate = find(school.getId());
37 | entityManager.getTransaction().begin();
38 | schoolToUpdate.setCity(school.getCity());
39 | schoolToUpdate.setName(school.getName());
40 | entityManager.getTransaction().commit();
41 | return schoolToUpdate;
42 | }
43 |
44 | public void delete(School school) {
45 | entityManager.getTransaction().begin();
46 | entityManager.remove(school);
47 | entityManager.getTransaction().commit();
48 | }
49 |
50 | public void close() {
51 | this.entityManager.close();
52 | this.emf.close();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/repository/StudentRepository.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.repository;
2 |
3 | import org.tutorial.model.School;
4 | import org.tutorial.model.Student;
5 | import org.tutorial.model.Teacher;
6 | import org.tutorial.model.Tutor;
7 |
8 | import javax.persistence.*;
9 | import javax.persistence.criteria.*;
10 | import java.util.Arrays;
11 | import java.util.List;
12 |
13 | public class StudentRepository {
14 |
15 | private EntityManager entityManager;
16 | private EntityManagerFactory emf;
17 |
18 | public StudentRepository() {
19 | this.emf = Persistence.createEntityManagerFactory("student_pu");
20 | this.entityManager = this.emf.createEntityManager();
21 | }
22 |
23 | public StudentRepository(String pu) {
24 | this.emf = Persistence.createEntityManagerFactory(pu);
25 | this.entityManager = this.emf.createEntityManager();
26 | }
27 |
28 | public Student add(Student student) {
29 | entityManager.getTransaction().begin();
30 | entityManager.persist(student);
31 | entityManager.getTransaction().commit();
32 | return student;
33 | }
34 |
35 | public Tutor addTutor(Long id, Tutor tutor) {
36 | entityManager.getTransaction().begin();
37 | Student student = find(id);
38 | student.setTutor(tutor);
39 | entityManager.getTransaction().commit();
40 | return tutor;
41 | }
42 |
43 | public Student find(Long id) {
44 | return entityManager.find(Student.class, id);
45 | }
46 |
47 | public Student findById(Long id) {
48 | Query query = entityManager.createNamedQuery("find student by id");
49 | query.setParameter("id", id);
50 | return (Student) query.getSingleResult();
51 | }
52 |
53 | public Student updateFirstNameById(String firstName, Long id) {
54 | entityManager.getTransaction().begin();
55 | Query query = entityManager.createQuery("Update Student set firstName = '"+ firstName + "' where id = " + id );
56 | query.executeUpdate();
57 | entityManager.getTransaction().commit();
58 | entityManager.clear();
59 | return findById(id);
60 | }
61 |
62 | public Student updateLastNameById(String lastName, Long id) {
63 | entityManager.getTransaction().begin();
64 | Query query = entityManager.createQuery("Update Student set lastName = '"+ lastName + "' where id = " + id );
65 | query.executeUpdate();
66 | entityManager.getTransaction().commit();
67 | entityManager.clear();
68 | return findById(id);
69 | }
70 |
71 | public void deleteById(Long id) {
72 | entityManager.getTransaction().begin();
73 | Query query = entityManager.createQuery("Delete from Student where id =" + id);
74 | query.executeUpdate();
75 | entityManager.getTransaction().commit();
76 | }
77 |
78 | public List findByFirstNameStartWith(String keyword) {
79 | Query query = entityManager.createQuery("Select s from Student s where s.firstName like '" + keyword + "%'");
80 | return query.getResultList();
81 | }
82 |
83 | public List findByLastNameEndWith(String keyword) {
84 | Query query = entityManager.createQuery("Select s from Student s where s.lastName like '%" + keyword + "'");
85 | return query.getResultList();
86 | }
87 |
88 | public List findSortingByFirstName() {
89 | Query query = entityManager.createQuery("Select s from Student s order by s.firstName desc");
90 | return query.getResultList();
91 | }
92 |
93 | public List findSortingById() {
94 | Query query = entityManager.createQuery("Select s from Student s order by s.id desc");
95 | return query.getResultList();
96 | }
97 |
98 | public Long count() {
99 | Query query = entityManager.createQuery("Select count(s) from Student s");
100 | return (Long) query.getSingleResult();
101 | }
102 |
103 | public Student update(Student student) {
104 | Student studentToUpdate = find(student.getId());
105 | entityManager.getTransaction().begin();
106 | studentToUpdate.setFirstName(student.getFirstName());
107 | studentToUpdate.setLastName(student.getLastName());
108 | entityManager.getTransaction().commit();
109 | return studentToUpdate;
110 | }
111 |
112 | public void delete(Student student) {
113 | entityManager.getTransaction().begin();
114 | entityManager.remove(student);
115 | entityManager.getTransaction().commit();
116 | }
117 |
118 | public List findFirstNames() {
119 | Query query = entityManager.createQuery("Select s.firstName from Student s");
120 | return query.getResultList();
121 | }
122 |
123 | public List findLastNames() {
124 | Query query = entityManager.createQuery("Select s.lastName from Student s");
125 | return query.getResultList();
126 | }
127 |
128 | public void addTeacher(Long id, Teacher teacher) {
129 | entityManager.getTransaction().begin();
130 | Student student = find(id);
131 | if(student != null) {
132 | student.getTeachers().add(teacher);
133 | }
134 | entityManager.getTransaction().commit();
135 | }
136 |
137 | public void removeTeacher(Long id, Teacher teacher) {
138 | Student student = find(id);
139 | if(student != null) {
140 | student.getTeachers().remove(teacher);
141 | }
142 | }
143 |
144 | public List getStudentWithCriteriaBuilder() {
145 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
146 | CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Student.class);
147 |
148 | Root studentRoot = criteriaQuery.from(Student.class);
149 |
150 | criteriaQuery.select(studentRoot.get("firstName"));
151 | criteriaQuery.distinct(true);
152 | criteriaQuery.orderBy(criteriaBuilder.desc(studentRoot.get("firstName")));
153 |
154 | CriteriaQuery select = criteriaQuery.select(studentRoot);
155 | TypedQuery query = entityManager.createQuery(select);
156 |
157 | return query.getResultList();
158 | }
159 |
160 | public List getStudentsWithWHEREFirstName() {
161 |
162 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
163 | CriteriaQuery query = criteriaBuilder.createQuery(Student.class);
164 |
165 | Root from = query.from(Student.class);
166 |
167 | List firstNameList = Arrays.asList(new String[]{"SFirstName_1","SFirstName_2"});
168 |
169 | Expression exp = from.get("firstName");
170 | Predicate in = exp.in(firstNameList);
171 | query.where(in);
172 | query.groupBy(from.get("lastName"));
173 |
174 | CriteriaQuery select = query.select(from);
175 | TypedQuery query1 = entityManager.createQuery(select);
176 |
177 | return query1.getResultList();
178 | }
179 |
180 |
181 | public void close() {
182 | this.entityManager.close();
183 | this.emf.close();
184 | }
185 | }
186 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/repository/TeacherRepository.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.repository;
2 |
3 | import org.tutorial.model.Student;
4 | import org.tutorial.model.Teacher;
5 | import org.tutorial.model.Tutor;
6 |
7 | import javax.persistence.EntityManager;
8 | import javax.persistence.EntityManagerFactory;
9 | import javax.persistence.Persistence;
10 |
11 | public class TeacherRepository {
12 |
13 | private EntityManager entityManager;
14 | private EntityManagerFactory emf;
15 |
16 | public TeacherRepository() {
17 | this.emf = Persistence.createEntityManagerFactory("student_pu");
18 | this.entityManager = this.emf.createEntityManager();
19 | }
20 |
21 | public TeacherRepository(String pu) {
22 | this.emf = Persistence.createEntityManagerFactory(pu);
23 | this.entityManager = this.emf.createEntityManager();
24 | }
25 |
26 | public Teacher add(Teacher teacher) {
27 | entityManager.getTransaction().begin();
28 | entityManager.persist(teacher);
29 | entityManager.getTransaction().commit();
30 | return teacher;
31 | }
32 |
33 | public Teacher find(Long id) {
34 | return entityManager.find(Teacher.class, id);
35 | }
36 |
37 | public Teacher update(Tutor teacher) {
38 | Teacher teacherToUpdate = find(teacher.getId());
39 | entityManager.getTransaction().begin();
40 | teacherToUpdate.setLastName(teacher.getLastName());
41 | teacherToUpdate.setFirstName(teacher.getFirstName());
42 | entityManager.getTransaction().commit();
43 | return teacherToUpdate;
44 | }
45 |
46 | public void delete(Teacher teacher) {
47 | entityManager.getTransaction().begin();
48 | entityManager.remove(teacher);
49 | entityManager.getTransaction().commit();
50 | }
51 |
52 | public void close() {
53 | this.entityManager.close();
54 | this.emf.close();
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/org/tutorial/repository/TutorRepository.java:
--------------------------------------------------------------------------------
1 | package org.tutorial.repository;
2 |
3 | import org.tutorial.model.Tutor;
4 |
5 | import javax.persistence.EntityManager;
6 | import javax.persistence.EntityManagerFactory;
7 | import javax.persistence.Persistence;
8 |
9 | public class TutorRepository {
10 |
11 | private EntityManager entityManager;
12 | private EntityManagerFactory emf;
13 |
14 | public TutorRepository() {
15 | this.emf = Persistence.createEntityManagerFactory("student_pu");
16 | this.entityManager = this.emf.createEntityManager();
17 | }
18 |
19 | public TutorRepository(String pu) {
20 | this.emf = Persistence.createEntityManagerFactory(pu);
21 | this.entityManager = this.emf.createEntityManager();
22 | }
23 |
24 | public Tutor add(Tutor tutor) {
25 | entityManager.getTransaction().begin();
26 | entityManager.persist(tutor);
27 | entityManager.getTransaction().commit();
28 | return tutor;
29 | }
30 |
31 | public Tutor find(Long id) {
32 | return entityManager.find(Tutor.class, id);
33 | }
34 |
35 | public Tutor update(Tutor tutor) {
36 | Tutor tutorToUpdate = find(tutor.getId());
37 | entityManager.getTransaction().begin();
38 | tutorToUpdate.setLastName(tutor.getLastName());
39 | tutorToUpdate.setFirstName(tutor.getFirstName());
40 | entityManager.getTransaction().commit();
41 | return tutorToUpdate;
42 | }
43 |
44 | public void delete(Tutor tutor) {
45 | entityManager.getTransaction().begin();
46 | entityManager.remove(tutor);
47 | entityManager.getTransaction().commit();
48 | }
49 |
50 | public void close() {
51 | this.entityManager.close();
52 | this.emf.close();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.hibernate.jpa.HibernatePersistenceProvider
4 |
5 | org.tutorial.model.Person
6 | org.tutorial.model.Student
7 | org.tutorial.model.School
8 | org.tutorial.model.Tutor
9 | org.tutorial.model.Teacher
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/test/java/org/tutorial/AppTest.java:
--------------------------------------------------------------------------------
1 | package org.tutorial;
2 |
3 | import static org.junit.Assert.assertTrue;
4 |
5 | import org.junit.Test;
6 |
7 | /**
8 | * Unit test for simple App.
9 | */
10 | public class AppTest
11 | {
12 | /**
13 | * Rigorous Test :-)
14 | */
15 | @Test
16 | public void shouldAnswerWithTrue()
17 | {
18 | assertTrue( true );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/test/java/org/tutorial/StudentRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package org.tutorial;
2 |
3 | import org.junit.*;
4 | import org.tutorial.model.Student;
5 | import org.tutorial.repository.StudentRepository;
6 |
7 | import static org.junit.Assert.*;
8 |
9 |
10 | public class StudentRepositoryTest {
11 |
12 | private static StudentRepository repository;
13 |
14 | @BeforeClass
15 | public static void beforeClass() {
16 | repository = new StudentRepository("student_pu_test");
17 | }
18 |
19 | @AfterClass
20 | public static void afterClass() {
21 | repository.close();
22 | }
23 |
24 | @Before
25 | public void setUp() {}
26 |
27 | @After
28 | public void tearDown() {}
29 |
30 | @Test
31 | public void add() {
32 | Student student = new Student("Red", "Alan");
33 | student.setLastName("Red");
34 | student.setFirstName("Alan");
35 |
36 | repository.add(student);
37 |
38 | assertNotNull(student.getId());
39 | assertNotNull(student.getId());
40 | }
41 |
42 | @Test
43 | public void find() {
44 | Student student = new Student("Red", "Alan");
45 |
46 | repository.add(student);
47 |
48 | student = repository.find(student.getId());
49 |
50 | assertNotNull(student);
51 | assertNotNull(student.getId());
52 | assertEquals("Alan", student.getLastName());
53 | }
54 |
55 | @Test
56 | public void update() {
57 | Student student = new Student("Red", "Alan");
58 |
59 | student = repository.add(student);
60 |
61 | student.setLastName("Green");
62 | student = repository.update(student);
63 |
64 | assertNotNull(student);
65 | assertEquals("Green", student.getLastName());
66 | assertEquals("Red", student.getFirstName());
67 |
68 | }
69 |
70 | @Test
71 | public void delete() {
72 | Student student = new Student("Red", "Alan");
73 |
74 | student = repository.add(student);
75 |
76 | repository.delete(student);
77 |
78 | student = repository.find(student.getId());
79 |
80 | assertNull(student);
81 |
82 | }
83 |
84 |
85 | }
--------------------------------------------------------------------------------
/src/test/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.hibernate.jpa.HibernatePersistenceProvider
4 |
5 | org.tutorial.model.Person
6 | org.tutorial.model.Student
7 | org.tutorial.model.School
8 | org.tutorial.model.Tutor
9 | org.tutorial.model.Teacher
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------