├── .gitignore
├── README.md
├── hibernatedemo1
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── edu
│ │ └── mum
│ │ └── cs
│ │ ├── Main.java
│ │ └── domain
│ │ └── Person.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
├── hibernatedemo2
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── edu
│ │ └── mum
│ │ └── cs
│ │ ├── ClearCloseMain.java
│ │ ├── FirstLevelCacheMain.java
│ │ ├── Main.java
│ │ ├── MergeTestMain.java
│ │ ├── RemoveTestMain.java
│ │ └── domain
│ │ ├── Book.java
│ │ └── Person.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
├── hibernatedemo3
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── xing
│ │ └── rujuan
│ │ ├── AppMain.java
│ │ ├── manytomany
│ │ ├── Car.java
│ │ └── Person.java
│ │ ├── manytoone
│ │ ├── Address.java
│ │ └── Person.java
│ │ ├── onetomany
│ │ ├── Address.java
│ │ └── Person.java
│ │ └── onetoone
│ │ ├── embeddable
│ │ ├── Address.java
│ │ └── Customer.java
│ │ ├── joincolumn
│ │ ├── Address.java
│ │ ├── AppMain.java
│ │ └── Customer.java
│ │ └── sharedpk
│ │ ├── Address.java
│ │ └── Customer.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
├── hibernatedemo4
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── xing
│ │ └── rujuan
│ │ ├── joinedtables
│ │ ├── Account.java
│ │ ├── AppMain.java
│ │ ├── Checking.java
│ │ └── Savings.java
│ │ ├── singletable
│ │ ├── Account.java
│ │ ├── AppMain.java
│ │ ├── Checking.java
│ │ └── Savings.java
│ │ └── tableperconcreteclass
│ │ ├── Account.java
│ │ ├── AppMain.java
│ │ ├── Checking.java
│ │ └── Savings.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
├── hibernatedemo5
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── xing
│ │ └── rujuan
│ │ ├── compsiteids
│ │ ├── Address.java
│ │ ├── AppMain.java
│ │ ├── Name.java
│ │ └── Person.java
│ │ └── secondarytable
│ │ ├── AppMain.java
│ │ └── Student.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
├── hibernatedemo6
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── xing
│ │ └── rujuan
│ │ └── queries
│ │ ├── Account.java
│ │ ├── Address.java
│ │ ├── App.java
│ │ ├── CheckingAccount.java
│ │ ├── Person.java
│ │ ├── PhoneNumber.java
│ │ └── SavingsAccount.java
│ └── resources
│ ├── META-INF
│ └── persistence.xml
│ └── test.sql
├── hibernatedemo7
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── xing
│ │ └── rujuan
│ │ ├── Address.java
│ │ ├── App.java
│ │ ├── Author.java
│ │ ├── Book.java
│ │ ├── Customer.java
│ │ ├── Movie.java
│ │ └── SalesRep.java
│ └── resources
│ └── META-INF
│ └── persistence.xml
└── hibernatedemo8
├── pom.xml
└── src
└── main
├── java
└── xing
│ └── rujuan
│ ├── App.java
│ ├── Owner.java
│ ├── Pet.java
│ └── Populate.java
└── resources
└── META-INF
└── persistence.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23 | hs_err_pid*
24 |
25 |
26 | ### IntelliJ IDEA ###
27 | .idea
28 | *.iws
29 | *.iml
30 | *.ipr
31 | target
32 | mvnw
33 | mvnw.cmd
34 | classes
35 | .mvn
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Hibernate
2 | Hibernate Examples
3 |
--------------------------------------------------------------------------------
/hibernatedemo1/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo1
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.hibernate
15 | hibernate-entitymanager
16 | 5.4.9.Final
17 |
18 |
19 |
20 | mysql
21 | mysql-connector-java
22 | 8.0.16
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/hibernatedemo1/src/main/java/edu/mum/cs/Main.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Person;
4 | import org.hibernate.Transaction;
5 |
6 | import javax.persistence.EntityManager;
7 | import javax.persistence.EntityManagerFactory;
8 | import javax.persistence.EntityTransaction;
9 | import javax.persistence.Persistence;
10 | import java.time.LocalDate;
11 | import java.util.Date;
12 |
13 | public class Main {
14 |
15 | public static void main(String[] args){
16 | EntityManagerFactory factory = Persistence.createEntityManagerFactory("edu.mum.cs");
17 | EntityManager em = factory.createEntityManager();
18 | EntityTransaction transaction = em.getTransaction();
19 |
20 | transaction.begin();
21 | Person p = new Person("Miss", "Xing", "test@gmail.com", new Date(), LocalDate.of(2019, 01, 01));
22 | em.persist(p);
23 |
24 | em.createQuery("from people");
25 | em.createNativeQuery("select * from mycustomizedperson");
26 | transaction.commit();
27 | em.close();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/hibernatedemo1/src/main/java/edu/mum/cs/domain/Person.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs.domain;
2 |
3 | import javax.persistence.*;
4 | import java.time.LocalDate;
5 | import java.util.Date;
6 |
7 | @Table(name = "mycustomizedperson")
8 | @Entity(name="people")
9 | public class Person {
10 |
11 | @Id
12 | @GeneratedValue(strategy = GenerationType.AUTO)
13 | @Column(name = "person_id")
14 | private Long id;
15 |
16 | @Column(name = "first", length = 50)
17 | private String firstName;
18 | private String lastName;
19 |
20 | @Column(unique = true, length = 250)
21 | private String email;
22 |
23 | @Temporal(TemporalType.DATE)
24 | private Date birthDate;
25 |
26 | private LocalDate boa;
27 |
28 | @Transient
29 | private int temp;
30 |
31 | public Person(String firstName, String lastName) {
32 | this.firstName = firstName;
33 | this.lastName = lastName;
34 | }
35 |
36 | public Person(String firstName, String lastName, String email, Date birthDate) {
37 | this.firstName = firstName;
38 | this.lastName = lastName;
39 | this.email = email;
40 | this.birthDate = birthDate;
41 | }
42 |
43 | public Person(String firstName, String lastName, String email, Date birthDate, LocalDate boa) {
44 | this.firstName = firstName;
45 | this.lastName = lastName;
46 | this.email = email;
47 | this.birthDate = birthDate;
48 | this.boa = boa;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/hibernatedemo1/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | Persistence unit for Hibernate
7 |
8 |
9 | org.hibernate.jpa.HibernatePersistenceProvider
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/hibernatedemo2/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo2
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.hibernate
15 | hibernate-entitymanager
16 | 5.4.9.Final
17 |
18 |
19 |
20 | mysql
21 | mysql-connector-java
22 | 8.0.16
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/ClearCloseMain.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Book;
4 |
5 | import javax.persistence.EntityManager;
6 | import javax.persistence.EntityManagerFactory;
7 | import javax.persistence.Persistence;
8 |
9 | public class ClearCloseMain {
10 |
11 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
12 |
13 | private void clear(){
14 | EntityManager em = emf.createEntityManager();
15 | em.getTransaction().begin();
16 |
17 | Book book = new Book("222", "Hibernate");
18 | System.out.println("1..........");
19 | em.persist(book);
20 | System.out.println("2..........");
21 | System.out.println("3....." + em.contains(book));
22 |
23 | em.flush();
24 | System.out.println("4..........");
25 | em.clear(); //detach all objects in cache
26 | System.out.println("5......" + em.contains(book));
27 |
28 | em.getTransaction().commit();
29 | System.out.println("6..........");
30 | }
31 |
32 | private void close(){
33 | EntityManager em = emf.createEntityManager();
34 | em.getTransaction().begin();
35 |
36 | Book book = new Book("333", "Hibernate");
37 | System.out.println("1..........");
38 | em.persist(book);
39 | System.out.println("2..........");
40 | em.getTransaction().commit();
41 | System.out.println("3..........");
42 | em.close();
43 | System.out.println("4..........");
44 | em.contains(book);
45 | System.out.println("5..........");
46 | }
47 |
48 |
49 | public static void main(String[] args) {
50 | ClearCloseMain main = new ClearCloseMain();
51 | // main.clear();
52 | main.close();
53 | emf.close();
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/FirstLevelCacheMain.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Book;
4 | import edu.mum.cs.domain.Person;
5 |
6 | import javax.persistence.EntityManager;
7 | import javax.persistence.EntityManagerFactory;
8 | import javax.persistence.Persistence;
9 | import javax.persistence.TypedQuery;
10 |
11 | public class FirstLevelCacheMain {
12 |
13 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
14 |
15 | // Insert may be held in cache
16 | private void persist(){
17 |
18 | EntityManager em = emf.createEntityManager();
19 | em.getTransaction().begin();
20 |
21 | // Person p = new Person("Miss", "Xing");
22 | Book book = new Book("111", "Hibernate");
23 | System.out.println("1..........");
24 | em.persist(book);
25 | System.out.println("2..........");
26 |
27 | em.getTransaction().commit();
28 | System.out.println("3..........");
29 | em.close();
30 |
31 | }
32 |
33 | private void retrieval(){
34 | EntityManager em = emf.createEntityManager();
35 | em.getTransaction().begin();
36 |
37 | // Person p = new Person("Miss", "Xing");
38 | Book book = new Book("111", "Hibernate");
39 | System.out.println("1..........");
40 | em.persist(book);
41 | System.out.println("2..........");
42 |
43 | Book book2 = em.find(Book.class, "111");
44 | System.out.println("3.......... " + book2.getTitle());
45 |
46 | em.getTransaction().commit();
47 | System.out.println("4..........");
48 | em.close();
49 |
50 | }
51 |
52 | private void update(){
53 | EntityManager em = emf.createEntityManager();
54 | em.getTransaction().begin();
55 |
56 | // Person p = new Person("Miss", "Xing");
57 | Book book = new Book("111", "Hibernate");
58 | System.out.println("1..........");
59 | // em.persist(p);
60 | em.persist(book);
61 | System.out.println("2..........");
62 |
63 | // p.setFirstName("Tina");
64 | book.setTitle("Spring");
65 | System.out.println("3..........");
66 |
67 | // p.setLastName("YYYYYY");
68 | System.out.println("4..........");
69 |
70 | em.getTransaction().commit();
71 | System.out.println("5..........");
72 | em.close();
73 |
74 | }
75 |
76 |
77 | private void remove(){
78 |
79 | EntityManager em = emf.createEntityManager();
80 | em.getTransaction().begin();
81 |
82 | Person p = new Person("Miss", "Xing");
83 | System.out.println("1..........");
84 | em.persist(p);
85 | System.out.println("2..........");
86 | p.setFirstName("Tina");
87 | System.out.println("3..........");
88 | em.remove(p);
89 | System.out.println("4..........");
90 | boolean existing = em.contains(p);
91 | System.out.println("5....."+ existing);
92 |
93 | em.getTransaction().commit();
94 | System.out.println("6..........");
95 | em.close();
96 | }
97 |
98 |
99 | public void pushChangesToDB(){
100 |
101 | EntityManager em = emf.createEntityManager();
102 | em.getTransaction().begin();
103 |
104 | Book book = new Book("111", "Hibernate");
105 | System.out.println("1..........");
106 | em.persist(book);
107 | System.out.println("2..........");
108 |
109 | book.setTitle("Spring");
110 | System.out.println("3..........");
111 |
112 | // TypedQuery query = em.createQuery("from Book", Book.class);
113 | // query.getResultList();
114 |
115 | em.flush();
116 | System.out.println("4..........");
117 |
118 | em.getTransaction().commit();
119 | System.out.println("6..........");
120 | }
121 |
122 |
123 | public static void main(String[] args) {
124 | FirstLevelCacheMain main = new FirstLevelCacheMain();
125 | // main.persist();
126 | // main.retrieval();
127 | // main.update();
128 | // main.remove();
129 | main.pushChangesToDB();
130 | emf.close();
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/Main.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Person;
4 |
5 | import javax.persistence.EntityManager;
6 | import javax.persistence.EntityManagerFactory;
7 | import javax.persistence.Persistence;
8 |
9 | public class Main {
10 |
11 | public static void main(String[] args){
12 | EntityManagerFactory emf =Persistence.createEntityManagerFactory("edu.mum.cs");
13 |
14 | EntityManager em = emf.createEntityManager();
15 |
16 | Person p = new Person("Tina", "Xing");
17 |
18 | em.getTransaction().begin();
19 |
20 | System.out.println("1---------------");
21 | em.persist(p);
22 | System.out.println(p);
23 | System.out.println("2---------------");
24 | p.setFirstName("test");
25 | System.out.println("3---------------");
26 | em.getTransaction().commit();
27 | System.out.println("4---------------");
28 | em.close();
29 | emf.close();
30 | System.out.println("5---------------");
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/MergeTestMain.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Book;
4 | import edu.mum.cs.domain.Person;
5 |
6 | import javax.persistence.EntityManager;
7 | import javax.persistence.EntityManagerFactory;
8 | import javax.persistence.Persistence;
9 |
10 | public class MergeTestMain {
11 |
12 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
13 |
14 | private void persist() {
15 | EntityManager em = emf.createEntityManager();
16 | em.getTransaction().begin();
17 | Person p = new Person("Tina", "Xing");
18 | em.persist(p);
19 | em.getTransaction().commit();
20 | em.close();
21 | }
22 |
23 | private void merge() {
24 | EntityManager em = emf.createEntityManager();
25 | em.getTransaction().begin();
26 |
27 | Person p1 = em.find(Person.class, 1L);
28 | em.detach(p1);
29 |
30 | Person p2 = em.find(Person.class, 1L);
31 |
32 | p1.setFirstName("Miss");
33 |
34 | p1 = em.merge(p1);
35 |
36 | p1.setFirstName("Josh");
37 |
38 |
39 | em.getTransaction().commit();
40 | em.close();
41 | }
42 |
43 |
44 | private void merge2() {
45 | EntityManager em = emf.createEntityManager();
46 | em.getTransaction().begin();
47 |
48 | Person p1 = new Person("Tina", "Xing");
49 | p1 = em.merge(p1);
50 |
51 |
52 | Book b1 = new Book("111-222-3333", "Hibernate...");
53 | b1 = em.merge(b1);
54 |
55 |
56 | em.getTransaction().commit();
57 | em.close();
58 | }
59 |
60 | private void mergeVSpersist() {
61 |
62 | EntityManager em = emf.createEntityManager();
63 | em.getTransaction().begin();
64 |
65 | Book b1 = new Book("111", "Hibernate");
66 | em.persist(b1);
67 |
68 | Book b2 = new Book("111", "Spring");
69 | em.persist(b2);
70 |
71 | // Book b1 = new Book("111", "Hibernate");
72 | // em.merge(b1);
73 | //
74 | // Book b2 = new Book("111", "Spring");
75 | // em.merge(b2);
76 |
77 |
78 |
79 | em.getTransaction().commit();
80 | em.close();
81 |
82 | }
83 |
84 |
85 | public static void main(String[] args) {
86 | MergeTestMain main = new MergeTestMain();
87 | // main.persist();
88 | // main.merge();
89 |
90 | main.mergeVSpersist();
91 |
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/RemoveTestMain.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs;
2 |
3 | import edu.mum.cs.domain.Book;
4 | import edu.mum.cs.domain.Person;
5 |
6 | import javax.persistence.EntityManager;
7 | import javax.persistence.EntityManagerFactory;
8 | import javax.persistence.Persistence;
9 |
10 | public class RemoveTestMain {
11 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
12 |
13 | private void removeTransientObject(){
14 | EntityManager em = emf.createEntityManager();
15 | em.getTransaction().begin();
16 |
17 | //1. remove transient object - assigned primary key
18 | // Book b1 = new Book("111-222-333", "Hibernate");
19 | // em.remove(b1);
20 |
21 | //2. remove transient object - auto generated primary key
22 | // Person p1 = new Person("Miss", "Xing");
23 | // em.remove(p1);
24 |
25 |
26 | em.getTransaction().commit();
27 | em.close();
28 | }
29 |
30 |
31 | private void removeDetachedObject(){
32 | EntityManager em = emf.createEntityManager();
33 | em.getTransaction().begin();
34 |
35 | Person p1 = new Person("Miss", "Xing");
36 | em.persist(p1);
37 | em.getTransaction().commit();
38 | em.close();
39 |
40 | em = emf.createEntityManager();
41 | em.getTransaction().begin();
42 | // em.detach(p1);
43 |
44 | em.remove(p1);
45 |
46 | em.getTransaction().commit();
47 | em.close();
48 | }
49 |
50 | private void removeManagedObject(){
51 |
52 | persist();
53 |
54 | EntityManager em = emf.createEntityManager();
55 | em.getTransaction().begin();
56 |
57 | // Person p = em.find(Person.class, 1L);
58 | // Person p = em.getReference(Person.class, 1L);
59 | // em.remove(p);
60 |
61 | System.out.println("1..........");
62 | Book b = em.getReference(Book.class, "111-222");
63 | System.out.println("2..........");
64 | em.remove(b);
65 | System.out.println("3..........");
66 |
67 | em.getTransaction().commit();
68 | System.out.println("4..........");
69 | em.close();
70 | }
71 |
72 | private void persist(){
73 | EntityManager em = emf.createEntityManager();
74 | em.getTransaction().begin();
75 |
76 | Person p1 = new Person("Miss", "Xing");
77 | em.persist(p1);
78 |
79 | Book b = new Book("111-222", "Hibernate");
80 | em.persist(b);
81 |
82 | em.getTransaction().commit();
83 | em.close();
84 | }
85 |
86 |
87 | public static void main(String[] args) {
88 | RemoveTestMain main = new RemoveTestMain();
89 | // main.removeTransientObject();
90 | // main.removeDetachedObject();
91 | main.removeManagedObject();
92 | emf.close();
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/domain/Book.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs.domain;
2 |
3 | import javax.persistence.Column;
4 | import javax.persistence.Entity;
5 | import javax.persistence.Id;
6 |
7 | @Entity
8 | public class Book {
9 |
10 | @Id
11 | @Column(length = 250)
12 | private String isbn;
13 |
14 | private String title;
15 |
16 | public Book() {
17 | }
18 |
19 | public Book(String isbn, String title) {
20 | this.isbn = isbn;
21 | this.title = title;
22 | }
23 |
24 | public String getIsbn() {
25 | return isbn;
26 | }
27 |
28 | public void setIsbn(String isbn) {
29 | this.isbn = isbn;
30 | }
31 |
32 | public String getTitle() {
33 | return title;
34 | }
35 |
36 | public void setTitle(String title) {
37 | this.title = title;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/java/edu/mum/cs/domain/Person.java:
--------------------------------------------------------------------------------
1 | package edu.mum.cs.domain;
2 |
3 | import javax.persistence.Entity;
4 | import javax.persistence.GeneratedValue;
5 | import javax.persistence.GenerationType;
6 | import javax.persistence.Id;
7 |
8 | @Entity
9 | public class Person {
10 |
11 | @Id
12 | @GeneratedValue(strategy = GenerationType.IDENTITY)
13 | // @GeneratedValue(strategy = GenerationType.SEQUENCE)
14 | private Long id;
15 |
16 | private String firstName;
17 | private String lastName;
18 |
19 |
20 | public Person() {
21 | }
22 |
23 | public Person(String firstName, String lastName) {
24 | this.firstName = firstName;
25 | this.lastName = lastName;
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 "Person{" +
55 | "id=" + id +
56 | ", firstName='" + firstName + '\'' +
57 | ", lastName='" + lastName + '\'' +
58 | '}';
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/hibernatedemo2/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | Persistence unit for Hibernate
7 |
8 |
9 | org.hibernate.jpa.HibernatePersistenceProvider
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/hibernatedemo3/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo3
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.hibernate
15 | hibernate-entitymanager
16 | 5.4.9.Final
17 |
18 |
19 |
20 | mysql
21 | mysql-connector-java
22 | 8.0.16
23 |
24 |
25 |
26 | org.projectlombok
27 | lombok
28 | 1.18.10
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 |
7 | public class AppMain {
8 |
9 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
10 |
11 | public static void main(String[] args) {
12 |
13 | EntityManager em = emf.createEntityManager();
14 | em.getTransaction().begin();
15 |
16 | em.getTransaction().commit();
17 | em.close();
18 |
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/manytomany/Car.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.manytomany;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.Id;
8 | import javax.persistence.ManyToMany;
9 | import java.util.List;
10 |
11 | @Setter
12 | @Getter
13 | //@Entity
14 | public class Car {
15 |
16 | @Id
17 | private Long id;
18 | private String model;
19 | private String color;
20 |
21 | @ManyToMany(mappedBy = "cars")
22 | private List people;
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/manytomany/Person.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.manytomany;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 | import java.util.List;
8 |
9 | @Setter
10 | @Getter
11 | //@Entity
12 | public class Person {
13 |
14 | @Id
15 | private Long id;
16 | private String firstName;
17 | private String lastName;
18 |
19 | @ManyToMany
20 | @JoinTable(name = "person_car", joinColumns = {@JoinColumn(name = "p_id")},
21 | inverseJoinColumns = {@JoinColumn(name = "c_id")})
22 | private List cars;
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/manytoone/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.manytoone;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Address {
12 |
13 | @Id
14 | private Long id;
15 | private String street;
16 | private String zipCode;
17 |
18 | @ManyToOne
19 | // @JoinColumn(name="person_id")
20 | @JoinTable(name = "person_address", joinColumns = {@JoinColumn(name = "person_id")}, inverseJoinColumns = {@JoinColumn(name = "address_id")})
21 | private Person person;
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/manytoone/Person.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.manytoone;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Person {
12 |
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.IDENTITY)
15 | @Column(name = "person_id")
16 | private Long id;
17 |
18 | private String firstName;
19 | private String lastName;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetomany/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetomany;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Address {
12 |
13 | @Id
14 | private Long id;
15 | private String street;
16 | private String zipCode;
17 |
18 | @ManyToOne
19 | @JoinTable(name = "person_address", joinColumns = {@JoinColumn(name = "address_id")}, inverseJoinColumns = {@JoinColumn(name = "person_id")})
20 | private Person person;
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetomany/Person.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetomany;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 | import java.util.List;
8 |
9 | @Setter
10 | @Getter
11 | //@Entity
12 | public class Person {
13 |
14 | @Id
15 | @GeneratedValue(strategy = GenerationType.IDENTITY)
16 | @Column(name = "person_id")
17 | private Long id;
18 |
19 | private String firstName;
20 | private String lastName;
21 |
22 | // @OneToMany
23 | // @JoinTable(name = "person_addr", joinColumns = {@JoinColumn(name = "addr_id")}, inverseJoinColumns = {@JoinColumn(name="person_id")})
24 | // @JoinColumn(name = "p_id")
25 |
26 | @OneToMany(mappedBy = "person")
27 | private List addresses;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/embeddable/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.embeddable;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Embeddable
11 | public class Address {
12 |
13 | //no primary key generated in this embeddable entity
14 | private String street;
15 | private String zipCode;
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/embeddable/Customer.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.embeddable;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Customer {
12 |
13 | @Id
14 | @GeneratedValue
15 | public Long id;
16 | public String firstName;
17 | public String lastName;
18 |
19 | @Embedded
20 | private Address address;
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/joincolumn/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.joincolumn;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | @Entity
11 | public class Address {
12 |
13 | @Id
14 | // @Column(name = "address_id")
15 | @GeneratedValue(strategy = GenerationType.IDENTITY)
16 | private Long id;
17 | private String street;
18 | private String zipCode;
19 |
20 | @OneToOne
21 | private Customer customer;
22 |
23 | public Address(String street, String zipCode) {
24 | this.street = street;
25 | this.zipCode = zipCode;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/joincolumn/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.joincolumn;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 |
7 | public class AppMain {
8 |
9 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
10 |
11 | public static void main(String[] args) {
12 |
13 | EntityManager em = emf.createEntityManager();
14 | em.getTransaction().begin();
15 |
16 | Customer c = new Customer("Miss", "Xing");
17 | Address address = new Address("1000 N 4th", "52556");
18 | c.setAddress(address);
19 | address.setCustomer(c);
20 |
21 | em.persist(c);
22 |
23 | em.remove(c);
24 |
25 | em.getTransaction().commit();
26 | em.close();
27 |
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/joincolumn/Customer.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.joincolumn;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | @Entity
11 | public class Customer {
12 |
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.IDENTITY)
15 | public Long id;
16 | public String firstName;
17 | public String lastName;
18 |
19 | @OneToOne(mappedBy = "customer", cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
20 | // @JoinColumn(name = "addr_id")
21 | private Address address;
22 |
23 | public Customer(String firstName, String lastName) {
24 | this.firstName = firstName;
25 | this.lastName = lastName;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/sharedpk/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.sharedpk;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Address {
12 |
13 | @Id
14 | private Long id;
15 | private String street;
16 | private String zipCode;
17 |
18 |
19 | @OneToOne
20 | @PrimaryKeyJoinColumn
21 | private Customer customer;
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/java/xing/rujuan/onetoone/sharedpk/Customer.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.onetoone.sharedpk;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | //@Entity
11 | public class Customer {
12 |
13 | @Id
14 | @GeneratedValue
15 | public Long id;
16 | public String firstName;
17 | public String lastName;
18 |
19 | @OneToOne
20 | @PrimaryKeyJoinColumn
21 | private Address address;
22 | }
23 |
--------------------------------------------------------------------------------
/hibernatedemo3/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | Persistence unit for Hibernate
7 |
8 |
9 | org.hibernate.jpa.HibernatePersistenceProvider
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/hibernatedemo4/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo4
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.hibernate
15 | hibernate-entitymanager
16 | 5.4.9.Final
17 |
18 |
19 |
20 | mysql
21 | mysql-connector-java
22 | 8.0.16
23 |
24 |
25 |
26 | org.projectlombok
27 | lombok
28 | 1.18.10
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/joinedtables/Account.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.joinedtables;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.*;
8 |
9 | @Setter
10 | @Getter
11 | @NoArgsConstructor
12 | //@Entity
13 | @Inheritance(strategy = InheritanceType.JOINED)
14 | public abstract class Account {
15 |
16 | @Id
17 | @GeneratedValue(strategy = GenerationType.IDENTITY)
18 | private Long id;
19 |
20 | private double balance;
21 |
22 | public Account(double balance) {
23 | this.balance = balance;
24 | }
25 | }
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/joinedtables/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.joinedtables;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 |
7 | public class AppMain {
8 |
9 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
10 |
11 | public static void main(String[] args) {
12 |
13 | EntityManager em = emf.createEntityManager();
14 | em.getTransaction().begin();
15 |
16 | Account checking = new Checking(300.00, 10.00);
17 | em.persist(checking);
18 |
19 | Account savings = new Savings(5000.00, 800.00);
20 | em.persist(savings);
21 |
22 | em.getTransaction().commit();
23 | em.close();
24 |
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/joinedtables/Checking.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.joinedtables;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.Column;
8 | import javax.persistence.Entity;
9 |
10 | @Setter
11 | @Getter
12 | @NoArgsConstructor
13 | //@Entity
14 | public class Checking extends Account {
15 |
16 | @Column(name="[limit]")
17 | private double limit;
18 |
19 | public Checking(double balance, double limit) {
20 | super(balance);
21 | this.limit = limit;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/joinedtables/Savings.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.joinedtables;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.Entity;
8 |
9 | @Setter
10 | @Getter
11 | @NoArgsConstructor
12 | //@Entity
13 | public class Savings extends Account {
14 |
15 | private double interest;
16 |
17 | public Savings(double balance, double interest) {
18 | super(balance);
19 | this.interest = interest;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/singletable/Account.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.singletable;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.*;
8 |
9 | @Setter
10 | @Getter
11 | @NoArgsConstructor
12 | //@Entity
13 | @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
14 | @DiscriminatorColumn(name = "ACCOUNT_TYPE", discriminatorType = DiscriminatorType.INTEGER)
15 | public abstract class Account {
16 |
17 | @Id
18 | @GeneratedValue(strategy = GenerationType.IDENTITY)
19 | private Long id;
20 |
21 | private double balance;
22 |
23 | public Account(double balance) {
24 | this.balance = balance;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/singletable/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.singletable;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 |
7 | public class AppMain {
8 |
9 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
10 |
11 | public static void main(String[] args) {
12 |
13 | EntityManager em = emf.createEntityManager();
14 | em.getTransaction().begin();
15 |
16 | Account checking = new Checking(100.00, 20.00);
17 | em.persist(checking);
18 |
19 | Account savings = new Savings(2000.00, 200.00);
20 | em.persist(savings);
21 |
22 | em.getTransaction().commit();
23 | em.close();
24 |
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/singletable/Checking.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.singletable;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.Column;
8 | import javax.persistence.DiscriminatorValue;
9 | import javax.persistence.Entity;
10 |
11 | @Setter
12 | @Getter
13 | @NoArgsConstructor
14 | //@Entity
15 | @DiscriminatorValue(value = "1")
16 | public class Checking extends Account {
17 |
18 | @Column(name="[limit]")
19 | private double limit;
20 |
21 | public Checking(double balance, double limit) {
22 | super(balance);
23 | this.limit = limit;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/singletable/Savings.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.singletable;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.DiscriminatorValue;
8 | import javax.persistence.Entity;
9 |
10 | @Setter
11 | @Getter
12 | @NoArgsConstructor
13 | //@Entity
14 | @DiscriminatorValue(value = "2")
15 | public class Savings extends Account {
16 |
17 | private double interest;
18 |
19 | public Savings(double balance, double interest) {
20 | super(balance);
21 | this.interest = interest;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/tableperconcreteclass/Account.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.tableperconcreteclass;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.*;
8 |
9 | @Setter
10 | @Getter
11 | @NoArgsConstructor
12 | @Entity
13 | @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
14 | public abstract class Account {
15 |
16 | @Id
17 | @GeneratedValue(strategy = GenerationType.AUTO)
18 | private Long id;
19 |
20 | private double balance;
21 |
22 | public Account(double balance) {
23 | this.balance = balance;
24 | }
25 | }
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/tableperconcreteclass/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.tableperconcreteclass;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 |
7 | public class AppMain {
8 |
9 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
10 |
11 | public static void main(String[] args) {
12 |
13 | EntityManager em = emf.createEntityManager();
14 | em.getTransaction().begin();
15 |
16 | Account checking = new Checking(500.00, 10.00);
17 | em.persist(checking);
18 |
19 | Account savings = new Savings(9000.00, 800.00);
20 | em.persist(savings);
21 |
22 | em.getTransaction().commit();
23 | em.close();
24 |
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/tableperconcreteclass/Checking.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.tableperconcreteclass;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.Column;
8 | import javax.persistence.Entity;
9 |
10 | @Setter
11 | @Getter
12 | @NoArgsConstructor
13 | @Entity
14 | public class Checking extends Account {
15 |
16 | @Column(name="[limit]")
17 | private double limit;
18 |
19 | public Checking(double balance, double limit) {
20 | super(balance);
21 | this.limit = limit;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/java/xing/rujuan/tableperconcreteclass/Savings.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.tableperconcreteclass;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.Entity;
8 |
9 | @Setter
10 | @Getter
11 | @NoArgsConstructor
12 | @Entity
13 | public class Savings extends Account {
14 |
15 | private double interest;
16 |
17 | public Savings(double balance, double interest) {
18 | super(balance);
19 | this.interest = interest;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/hibernatedemo4/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | Persistence unit for Hibernate
7 |
8 |
9 | org.hibernate.jpa.HibernatePersistenceProvider
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/hibernatedemo5/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo5
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 | org.apache.maven.plugins
14 | maven-compiler-plugin
15 |
16 | 8
17 | 8
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | org.hibernate
27 | hibernate-entitymanager
28 | 5.4.9.Final
29 |
30 |
31 |
32 | mysql
33 | mysql-connector-java
34 | 8.0.16
35 |
36 |
37 |
38 | org.projectlombok
39 | lombok
40 | 1.18.10
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/compsiteids/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.compsiteids;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.persistence.*;
7 |
8 | @Setter
9 | @Getter
10 | @Entity
11 | public class Address {
12 |
13 | @Id
14 | @GeneratedValue
15 | private Long id;
16 |
17 | private String street;
18 | private String zipCode;
19 |
20 | @ManyToOne
21 | @JoinColumns({
22 | @JoinColumn(name = "person_firstname", referencedColumnName = "firstName"),
23 | @JoinColumn(name = "person_lastname", referencedColumnName = "lastName")
24 | })
25 | private Person person;
26 |
27 | public Address(String street, String zipCode) {
28 | this.street = street;
29 | this.zipCode = zipCode;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/compsiteids/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.compsiteids;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 | import java.time.LocalDate;
7 |
8 | public class AppMain {
9 |
10 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
11 |
12 | public static void main(String[] args) {
13 |
14 | EntityManager em = emf.createEntityManager();
15 | em.getTransaction().begin();
16 |
17 | Name name = new Name("Tina", "Xing");
18 | Person p = new Person(name, LocalDate.of(2019, 01, 01));
19 |
20 |
21 | Address address = new Address("1000 N 4th", "52556");
22 | p.addAddress(address);
23 | Address address2 = new Address("1001 N 4th", "12556");
24 | p.addAddress(address2);
25 |
26 | em.persist(p);
27 |
28 | // Name name2 = new Name("Tina", "Xing");
29 | // Person p2 = new Person(name2, LocalDate.of(2018, 01, 01));
30 | // em.persist(p2);
31 |
32 | em.getTransaction().commit();
33 | em.close();
34 |
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/compsiteids/Name.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.compsiteids;
2 |
3 | import lombok.EqualsAndHashCode;
4 | import lombok.Getter;
5 | import lombok.NoArgsConstructor;
6 | import lombok.Setter;
7 |
8 | import javax.persistence.Column;
9 | import javax.persistence.Embeddable;
10 | import java.io.Serializable;
11 |
12 | @Setter
13 | @Getter
14 | @EqualsAndHashCode
15 | @NoArgsConstructor
16 | @Embeddable
17 | public class Name implements Serializable {
18 |
19 | @Column(length = 20)
20 | private String firstName;
21 | @Column(length = 30)
22 | private String lastName;
23 |
24 | public Name(String firstName, String lastName) {
25 | this.firstName = firstName;
26 | this.lastName = lastName;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/compsiteids/Person.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.compsiteids;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.CascadeType;
8 | import javax.persistence.EmbeddedId;
9 | import javax.persistence.Entity;
10 | import javax.persistence.OneToMany;
11 | import java.time.LocalDate;
12 | import java.util.ArrayList;
13 | import java.util.List;
14 |
15 | @Setter
16 | @Getter
17 | @NoArgsConstructor
18 | @Entity
19 | public class Person {
20 |
21 | @EmbeddedId
22 | private Name name;
23 |
24 | private LocalDate birthDate;
25 |
26 | @OneToMany(mappedBy = "person", cascade = CascadeType.PERSIST)
27 | private List addresses = new ArrayList<>();
28 |
29 |
30 | public Person(Name name, LocalDate birthDate) {
31 | this.name = name;
32 | this.birthDate = birthDate;
33 | }
34 |
35 | public void addAddress(Address address){
36 | addresses.add(address);
37 | address.setPerson(this);
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/secondarytable/AppMain.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.secondarytable;
2 |
3 | import javax.persistence.EntityManager;
4 | import javax.persistence.EntityManagerFactory;
5 | import javax.persistence.Persistence;
6 | import java.time.LocalDate;
7 |
8 | public class AppMain {
9 |
10 | static EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
11 |
12 | public static void main(String[] args) {
13 |
14 | EntityManager em = emf.createEntityManager();
15 | em.getTransaction().begin();
16 |
17 | Student s1 = new Student("SNO.1", "Tina", "Xing", "Computer Science", LocalDate.of(2019, 11, 29));
18 | Student s2 = new Student("SNO.2", "Tina2", "Xing2", "Arts", LocalDate.of(2018, 10, 19));
19 | em.persist(s1);
20 | em.persist(s2);
21 |
22 | em.getTransaction().commit();
23 | em.close();
24 |
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/java/xing/rujuan/secondarytable/Student.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.secondarytable;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import javax.persistence.*;
8 | import java.time.LocalDate;
9 |
10 | @Setter
11 | @Getter
12 | @NoArgsConstructor
13 | //@Entity
14 | @SecondaryTable(name = "person")
15 | public class Student {
16 |
17 | @Id
18 | @GeneratedValue
19 | private Long id;
20 |
21 | @Column(table = "person")
22 | private String ssn;
23 |
24 | @Column(table = "person")
25 | private String firstName;
26 |
27 | @Column(table = "person")
28 | private String lastName;
29 |
30 | private String major;
31 | private LocalDate entry;
32 |
33 | public Student(String ssn, String firstName, String lastName, String major, LocalDate entry) {
34 | this.ssn = ssn;
35 | this.firstName = firstName;
36 | this.lastName = lastName;
37 | this.major = major;
38 | this.entry = entry;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/hibernatedemo5/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | Persistence unit for Hibernate
7 |
8 |
9 | org.hibernate.jpa.HibernatePersistenceProvider
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/hibernatedemo6/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | xing.rujuan
8 | hibernatedemo6
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.apache.maven.plugins
15 | maven-compiler-plugin
16 |
17 | 8
18 | 8
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | org.hibernate
28 | hibernate-entitymanager
29 | 5.4.9.Final
30 |
31 |
32 |
33 | mysql
34 | mysql-connector-java
35 | 8.0.16
36 |
37 |
38 |
39 | org.projectlombok
40 | lombok
41 | 1.18.10
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/hibernatedemo6/src/main/java/xing/rujuan/queries/Account.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.queries;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 | import lombok.ToString;
7 |
8 | import javax.persistence.Entity;
9 | import javax.persistence.GeneratedValue;
10 | import javax.persistence.Id;
11 |
12 | @ToString
13 | @NoArgsConstructor
14 | @Setter
15 | @Getter
16 | @Entity
17 | public abstract class Account {
18 | @Id
19 | @GeneratedValue
20 | private Long number;
21 | private double balance;
22 |
23 | public Account(double balance) {
24 | this.balance = balance;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/hibernatedemo6/src/main/java/xing/rujuan/queries/Address.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.queries;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 | import lombok.ToString;
7 |
8 | import javax.persistence.Entity;
9 | import javax.persistence.GeneratedValue;
10 | import javax.persistence.Id;
11 |
12 | @Setter
13 | @Getter
14 | @ToString
15 | @NoArgsConstructor
16 | @Entity
17 | public class Address {
18 | @Id
19 | @GeneratedValue
20 | private Long id;
21 | private String street;
22 | private String city;
23 | private String state;
24 | private String zip;
25 |
26 | public Address(String street, String city, String state, String zip) {
27 | this.street = street;
28 | this.city = city;
29 | this.state = state;
30 | this.zip = zip;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/hibernatedemo6/src/main/java/xing/rujuan/queries/App.java:
--------------------------------------------------------------------------------
1 | package xing.rujuan.queries;
2 |
3 | import java.io.Serializable;
4 | import java.text.DateFormat;
5 | import java.text.ParseException;
6 | import java.util.Calendar;
7 | import java.util.Date;
8 | import java.util.List;
9 | import java.util.Map;
10 |
11 | import javax.persistence.EntityManager;
12 | import javax.persistence.EntityManagerFactory;
13 | import javax.persistence.ParameterMode;
14 | import javax.persistence.Persistence;
15 | import javax.persistence.Query;
16 | import javax.persistence.StoredProcedureQuery;
17 | import javax.persistence.TemporalType;
18 | import javax.persistence.TypedQuery;
19 | import javax.persistence.criteria.CriteriaBuilder;
20 | import javax.persistence.criteria.CriteriaQuery;
21 | import javax.persistence.criteria.Join;
22 | import javax.persistence.criteria.Root;
23 |
24 | public class App {
25 | private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs");
26 |
27 | private static void createQuery() {
28 | EntityManager em = emf.createEntityManager();
29 | em.getTransaction().begin();
30 |
31 | // Query query = em.createQuery("from Person");
32 | TypedQuery query = em.createQuery("from Person", Person.class);
33 | List personList = query.getResultList();
34 | System.out.println(personList);
35 | em.getTransaction().commit();
36 | em.close();
37 | }
38 |
39 | private static void namedQuery() {
40 | EntityManager em = emf.createEntityManager();
41 | em.getTransaction().begin();
42 |
43 | TypedQuery query = em.createNamedQuery("Person.everyone", Person.class);
44 | List personList = query.getResultList();
45 | System.out.println(personList);
46 | em.getTransaction().commit();
47 | em.close();
48 | }
49 |
50 | private static void polymorphicQuery() {
51 |
52 | EntityManager em = emf.createEntityManager();
53 | em.getTransaction().begin();
54 |
55 | Account checking = new CheckingAccount(100.00, 20.00);
56 | em.persist(checking);
57 |
58 | Account savings = new SavingsAccount(2000.00, 200.00);
59 | em.persist(savings);
60 |
61 | TypedQuery query = em.createQuery("from Account", Account.class);
62 | List accounts = query.getResultList();
63 | System.out.println(accounts);
64 |
65 | em.getTransaction().commit();
66 | em.close();
67 | }
68 |
69 | private static void aliasesQuery() {
70 | EntityManager em = emf.createEntityManager();
71 | em.getTransaction().begin();
72 |
73 | TypedQuery query = em.createQuery("from Person as p where p.id = 1", Person.class);
74 | System.out.println(query.getResultList());
75 |
76 | em.getTransaction().commit();
77 | em.close();
78 | }
79 |
80 | private static void pagination() {
81 | EntityManager em = emf.createEntityManager();
82 | em.getTransaction().begin();
83 |
84 | TypedQuery query = em.createQuery("frOM Person", Person.class);
85 | query.setFirstResult(7);
86 | query.setMaxResults(5);
87 | List people = query.getResultList();
88 | System.out.println(people.size());
89 | System.out.println(people);
90 |
91 |
92 | em.getTransaction().commit();
93 | em.close();
94 | }
95 |
96 | private static void orderBy() {
97 | EntityManager em = emf.createEntityManager();
98 | em.getTransaction().begin();
99 |
100 | // Query query = em.createQuery("from Person");
101 | TypedQuery query = em.createQuery("from Person p order by p.lastName desc", Person.class);
102 | List personList = query.getResultList();
103 | System.out.println(personList);
104 |
105 | em.getTransaction().commit();
106 | em.close();
107 | }
108 |
109 | private static void whereClause() {
110 | EntityManager em = emf.createEntityManager();
111 | em.getTransaction().begin();
112 |
113 | TypedQuery query = em.createQuery("from Person p where p.lastName like '%n%'", Person.class);
114 | List personList = query.getResultList();
115 | System.out.println(personList);
116 |
117 | em.getTransaction().commit();
118 | em.close();
119 | }
120 |
121 | private static void queryParameters() {
122 | EntityManager em = emf.createEntityManager();
123 | em.getTransaction().begin();
124 |
125 | String firstName = "John"; // john' or delete from person
126 | //NOT Good
127 | // TypedQuery query = em.createQuery("from Person p where p.firstName = '"+firstName+"'", Person.class);
128 |
129 | //1. Named Parameters
130 | // TypedQuery query = em.createQuery("from Person p where p.firstName = :first", Person.class);
131 | // query.setParameter("first", firstName);
132 |
133 | // 2. position
134 | TypedQuery query = em.createQuery("from Person p where p.lastName = ?1 and p.firstName = ?0", Person.class);
135 | query.setParameter(0, firstName);
136 | query.setParameter(1, "Doe");
137 |
138 | List personList = query.getResultList();
139 | System.out.println(personList);
140 |
141 | em.getTransaction().commit();
142 | em.close();
143 | }
144 |
145 | private static void singleResult() {
146 | EntityManager em = emf.createEntityManager();
147 | em.getTransaction().begin();
148 |
149 | TypedQuery query = em.createQuery("from Person p where p.id = 123", Person.class);
150 | // Person p = query.getSingleResult();
151 | // System.out.println(p);
152 | query.setMaxResults(1);
153 | List p = query.getResultList();
154 | System.out.println(p.size());
155 | // System.out.println(p.get(0));
156 | em.getTransaction().commit();
157 | em.close();
158 | }
159 |
160 | private static void specialAttributeId() {
161 | EntityManager em = emf.createEntityManager();
162 | em.getTransaction().begin();
163 |
164 | TypedQuery query = em.createQuery("from Person p where p.id = 1", Person.class);
165 |
166 | List p = query.getResultList();
167 | System.out.println(p);
168 | em.getTransaction().commit();
169 | em.close();
170 | }
171 |
172 | private static void join() {
173 | EntityManager em = emf.createEntityManager();
174 | em.getTransaction().begin();
175 |
176 | // 1. implicit join
177 | // TypedQuery query = em.createQuery("from Person p where p.address.state = 'Iowa'", Person.class);
178 |
179 | // 2. explicit join
180 | TypedQuery query = em.createQuery("select p from Person p join p.address addr where addr.state = 'Iowa'", Person.class);
181 |
182 | List p = query.getResultList();
183 | System.out.println(p);
184 | em.getTransaction().commit();
185 | em.close();
186 | }
187 |
188 | public static void joinCollection() {
189 | EntityManager em = emf.createEntityManager();
190 | em.getTransaction().begin();
191 |
192 | Person p1 = new Person("John", "Brown");
193 | p1.addPhonenumber(new PhoneNumber("641-472-1234", "Home"));
194 | p1.addPhonenumber(new PhoneNumber("641-919-5432", "Mobile"));
195 | em.persist(p1);
196 |
197 | Person p2 = new Person("Edward", "Towers");
198 | p2.addPhonenumber(new PhoneNumber("641-233-9876", "Mobile"));
199 | p2.addPhonenumber(new PhoneNumber("641-888-0987", "Home"));
200 | em.persist(p2);
201 |
202 | // TypedQuery