├── .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 query = em.createQuery("from Person p join p.numbers n where n.number like '641%'", Object[].class); 203 | // List list = query.getResultList(); 204 | // for(Object[] obj : list){ 205 | // System.out.println((Person)obj[0]); 206 | // System.out.println((PhoneNumber)obj[1]); 207 | // } 208 | 209 | // 2. use select clause 210 | // TypedQuery query2 = em.createQuery("select p from Person p join p.numbers n where n.number like '641%'", Person.class); 211 | // List personList = query2.getResultList(); 212 | // System.out.println(personList); 213 | 214 | // 3. use DISTINCT keyword 215 | TypedQuery query2 = em.createQuery("select distinct p from Person p join p.numbers n where n.number like '641%'", Person.class); 216 | List personList = query2.getResultList(); 217 | System.out.println(personList); 218 | 219 | em.getTransaction().commit(); 220 | em.close(); 221 | } 222 | 223 | public static void joinFetch() { 224 | EntityManager em = emf.createEntityManager(); 225 | em.getTransaction().begin(); 226 | 227 | Person p1 = new Person("John", "Brown"); 228 | p1.addPhonenumber(new PhoneNumber("641-472-1234", "Home")); 229 | p1.addPhonenumber(new PhoneNumber("641-919-5432", "Mobile")); 230 | em.persist(p1); 231 | 232 | Person p2 = new Person("Edward", "Towers"); 233 | p2.addPhonenumber(new PhoneNumber("641-233-9876", "Mobile")); 234 | p2.addPhonenumber(new PhoneNumber("641-888-0987", "Home")); 235 | em.persist(p2); 236 | 237 | em.getTransaction().commit(); 238 | em.close(); 239 | 240 | em = emf.createEntityManager(); 241 | em.getTransaction().begin(); 242 | System.out.println("1.................."); 243 | TypedQuery query2 = em.createQuery("from Person p join fetch p.numbers n where n.number like '641%'", Person.class); 244 | List personList = query2.getResultList(); 245 | 246 | 247 | personList.stream().forEach(p -> { 248 | System.out.println("2.................."); 249 | System.out.println(p.getNumbers()); 250 | System.out.println("3.................."); 251 | }); 252 | 253 | em.getTransaction().commit(); 254 | em.close(); 255 | } 256 | 257 | public static void main(String[] args) throws ParseException { 258 | // createQuery(); 259 | // namedQuery(); 260 | // polymorphicQuery(); 261 | // aliasesQuery(); 262 | // pagination(); 263 | // orderBy(); 264 | // whereClause(); 265 | // queryParameters(); 266 | // singleResult(); 267 | // specialAttributeId(); 268 | // join(); 269 | // joinCollection(); 270 | joinFetch(); 271 | emf.close(); 272 | } 273 | 274 | } 275 | -------------------------------------------------------------------------------- /hibernatedemo6/src/main/java/xing/rujuan/queries/CheckingAccount.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan.queries; 2 | 3 | 4 | 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.DiscriminatorValue; 9 | import javax.persistence.Entity; 10 | 11 | @Data 12 | @NoArgsConstructor 13 | @Entity 14 | @DiscriminatorValue("checking") 15 | public class CheckingAccount extends Account { 16 | private Double overdraftLimit; 17 | 18 | public CheckingAccount(double balance, Double overdraftLimit) { 19 | super(balance); 20 | this.overdraftLimit = overdraftLimit; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hibernatedemo6/src/main/java/xing/rujuan/queries/Person.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 java.util.ArrayList; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | import javax.persistence.*; 13 | 14 | @Getter 15 | @Setter 16 | @ToString(exclude = {"address", "numbers"}) 17 | @NoArgsConstructor 18 | @Entity 19 | @NamedQueries({ 20 | @NamedQuery(name="Person.everyone", query = "from Person") 21 | }) 22 | public class Person { 23 | @Id 24 | @GeneratedValue 25 | private Long id; 26 | private String firstName; 27 | private String lastName; 28 | // private String id; 29 | 30 | @ManyToOne(cascade = CascadeType.PERSIST) 31 | private Address address; 32 | 33 | @OneToMany(cascade = CascadeType.ALL) 34 | @JoinColumn(name = "person_id") 35 | private List numbers = new ArrayList<>(); 36 | 37 | public Person(String firstName, String lastName) { 38 | this.firstName = firstName; 39 | this.lastName = lastName; 40 | } 41 | 42 | public void addPhonenumber(PhoneNumber phoneNumber) { 43 | numbers.add(phoneNumber); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /hibernatedemo6/src/main/java/xing/rujuan/queries/PhoneNumber.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 | //@Data 13 | @Setter 14 | @Getter 15 | @NoArgsConstructor 16 | @ToString 17 | @Entity 18 | public class PhoneNumber { 19 | @Id 20 | @GeneratedValue 21 | private Long id; 22 | private String number; 23 | private String type; 24 | 25 | public PhoneNumber(String number, String type) { 26 | this.number = number; 27 | this.type = type; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /hibernatedemo6/src/main/java/xing/rujuan/queries/SavingsAccount.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan.queries; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import javax.persistence.DiscriminatorValue; 7 | import javax.persistence.Entity; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @Entity 12 | @DiscriminatorValue("savings") 13 | public class SavingsAccount extends Account { 14 | private Double APY; 15 | 16 | public SavingsAccount(double balance, Double APY) { 17 | super(balance); 18 | this.APY = APY; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hibernatedemo6/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 | 25 | -------------------------------------------------------------------------------- /hibernatedemo6/src/main/resources/test.sql: -------------------------------------------------------------------------------- 1 | insert into Address value(null, 'Fairfield', 'Iowa', '1000 N 4th', '52557'); 2 | insert into Address value(null, 'Washington', 'Des Monies', '200 S 5th', '72556'); 3 | INSERT into Person values(null, 'John', 'Doe', 1); 4 | INSERT into Person values(null, 'James', 'Brown', 1); 5 | INSERT into Person values(null, 'Alice', 'Long', 2); 6 | -- INSERT into Person values(null, 'John2', 'Doe2', 1); 7 | -- INSERT into Person values(null, 'James2', 'Brown2', 1); 8 | -- INSERT into Person values(null, 'Alice2', 'Long2', 1); 9 | -- INSERT into Person values(null, 'John3', 'Doe3', 1); 10 | -- INSERT into Person values(null, 'James3', 'Brown3', 1); 11 | -- INSERT into Person values(null, 'Alice3', 'Long3', 1); 12 | -- INSERT into Person values(null, 'John4', 'Doe4', 1); 13 | -- INSERT into Person values(null, 'James4', 'Brown4', 1); 14 | -- INSERT into Person values(null, 'Alice4', 'Long4', 1); 15 | -- INSERT into Person values(null, 'John5', 'Doe5', 1); 16 | -- INSERT into Person values(null, 'James5', 'Brown5', 1); 17 | -- INSERT into Person values(null, 'Alice5', 'Long5', 1); 18 | -- INSERT into Person values(null, 'John6', 'Doe6', 1); 19 | -- INSERT into Person values(null, 'James6', 'Brown6', 1); 20 | -- INSERT into Person values(null, 'Alice6', 'Long6', 1); 21 | 22 | 23 | -- create procedure calculate(IN x int, IN y int, OUT sum int, OUT prod int) begin select x + y into sum; select x * y into prod; end; 24 | 25 | -------------------------------------------------------------------------------- /hibernatedemo7/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | xing.rujuan 8 | hibernatedemo7 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 | 46 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/Address.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 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 | 13 | @Setter 14 | @Getter 15 | @ToString 16 | @NoArgsConstructor 17 | @Entity 18 | public class Address { 19 | @Id 20 | @GeneratedValue 21 | private Long id; 22 | private String city; 23 | private String state; 24 | 25 | public Address(String city, String state) { 26 | this.city = city; 27 | this.state = state; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/App.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import java.lang.reflect.Type; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import javax.persistence.EntityGraph; 9 | import javax.persistence.EntityManager; 10 | import javax.persistence.EntityManagerFactory; 11 | import javax.persistence.Persistence; 12 | import javax.persistence.TypedQuery; 13 | 14 | import org.hibernate.Session; 15 | import org.hibernate.SessionFactory; 16 | 17 | public class App { 18 | private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("edu.mum.cs"); 19 | 20 | 21 | private static void populateCustomer() { 22 | EntityManager em = emf.createEntityManager(); 23 | em.getTransaction().begin(); 24 | 25 | Customer cust1 = new Customer("Frank", "Brown"); 26 | Customer cust2 = new Customer("Jane", "Terrien"); 27 | Customer cust3 = new Customer("John", "Doe"); 28 | // Address address1 = new Address("Fairfield", "Iowa"); 29 | // Address address2 = new Address("Washington", "Iowa"); 30 | // Address address3 = new Address("Outtuwa", "Iowa"); 31 | // cust1.setAddress(address1); 32 | // cust2.setAddress(address2); 33 | // cust3.setAddress(address3); 34 | 35 | cust1.addBook(new Book("Hibernate 1")); 36 | cust1.addBook(new Book("Hibernate 2")); 37 | cust1.addBook(new Book("Hibernate 3")); 38 | 39 | cust2.addBook(new Book("Hibernate 4")); 40 | // cust2.addBook(new Book("Hibernate 5")); 41 | // cust3.addBook(new Book("Hibernate 6")); 42 | // cust3.addBook(new Book("Hibernate 7")); 43 | 44 | cust1.addMovie(new Movie("Shrek")); 45 | cust1.addMovie(new Movie("WALL-E")); 46 | cust1.addMovie(new Movie("Howls Moving Castle")); 47 | 48 | cust3.addMovie(new Movie("Forgetting Sarah Marshall")); 49 | 50 | em.persist(cust1); 51 | em.persist(cust2); 52 | em.persist(cust3); 53 | 54 | em.getTransaction().commit(); 55 | em.close(); 56 | } 57 | 58 | private static void lazyorEager() { 59 | EntityManager em = emf.createEntityManager(); 60 | em.getTransaction().begin(); 61 | System.out.println("1............."); 62 | TypedQuery query = em.createQuery("from Customer", Customer.class); 63 | 64 | System.out.println("2............."); 65 | List customers = query.getResultList(); 66 | System.out.println("3............."); 67 | 68 | for (Customer c : customers) { 69 | System.out.println("4............."); 70 | // System.out.println(c.getAddress()); 71 | System.out.println(c.getBooks().size()); 72 | System.out.println("5............."); 73 | System.out.println(""); 74 | } 75 | 76 | System.out.println("6............."); 77 | em.getTransaction().commit(); 78 | em.close(); 79 | } 80 | 81 | private static void cartesianProduct_BAD() { 82 | EntityManager em = emf.createEntityManager(); 83 | em.getTransaction().begin(); 84 | 85 | TypedQuery query = em.createQuery("from Customer c left join c.books left join c.movies", Object[].class); 86 | query.getResultList(); 87 | em.getTransaction().commit(); 88 | emf.close(); 89 | } 90 | 91 | 92 | private static void nPlusOneProblem() { 93 | EntityManager em = emf.createEntityManager(); 94 | em.getTransaction().begin(); 95 | 96 | SalesRep sr1 = new SalesRep("John Willis"); 97 | SalesRep sr2 = new SalesRep("Mary Long"); 98 | 99 | sr1.addCustomer(new Customer("Frank", "Brown")); 100 | sr1.addCustomer(new Customer("Jane", "Terrien")); 101 | sr2.addCustomer(new Customer("John", "Doe")); 102 | sr2.addCustomer(new Customer("Carol", "Reno")); 103 | 104 | em.persist(sr1); 105 | em.persist(sr2); 106 | em.getTransaction().commit(); 107 | em.close(); 108 | 109 | em = emf.createEntityManager(); 110 | em.getTransaction().begin(); 111 | 112 | TypedQuery query = em.createQuery("from SalesRep", SalesRep.class); 113 | 114 | System.out.println("1.........."); 115 | List list = query.getResultList(); 116 | System.out.println("2.........."); 117 | for (SalesRep salesRep : list) { 118 | System.out.println("3.........."); 119 | System.out.println(salesRep.getCustomers()); 120 | System.out.println("4.........."); 121 | } 122 | System.out.println("5.........."); 123 | em.getTransaction().commit(); 124 | em.close(); 125 | 126 | } 127 | 128 | private static void entityGraphAndJoinFetch() { 129 | EntityManager em = emf.createEntityManager(); 130 | em.getTransaction().begin(); 131 | 132 | Customer cust1 = new Customer("Frank", "Brown"); 133 | Customer cust2 = new Customer("Jane", "Terrien"); 134 | Customer cust3 = new Customer("John", "Doe"); 135 | 136 | cust1.setAddress(new Address("Fairfield", "Iowa")); 137 | cust2.setAddress(new Address("Chicago", "Illinois")); 138 | cust3.setAddress(new Address("Washington", "Iowa")); 139 | 140 | cust1.addBook( 141 | new Book("Harry Potter and the Deathly Hallows", 142 | new Author("J.K. Rowlings"))); 143 | cust1.addBook( 144 | new Book("Unseen Academicals (Discworld)", 145 | new Author("Terry Pratchett"))); 146 | cust1.addBook( 147 | new Book("The Color of Magic (Discworld)", 148 | new Author("Terry Pratchett"))); 149 | cust2.addBook( 150 | new Book("Twilight (The Twilight Saga, Book1)", 151 | new Author("Stephenie Meyer"))); 152 | 153 | em.persist(cust1); 154 | em.persist(cust2); 155 | em.persist(cust3); 156 | 157 | em.getTransaction().commit(); 158 | em.close(); 159 | System.out.println(); 160 | System.out.println(); 161 | em = emf.createEntityManager(); 162 | em.getTransaction().begin(); 163 | 164 | // 1. Use entity graph 165 | // TypedQuery query = em.createQuery("from Customer", Customer.class); 166 | // EntityGraph entityGraph = em.createEntityGraph(Customer.class); 167 | // entityGraph.addAttributeNodes("address"); 168 | // entityGraph.addSubgraph("books").addAttributeNodes("author"); 169 | // query.setHint("javax.persistence.fetchgraph", entityGraph); 170 | 171 | // 2. Join Fecth 172 | TypedQuery query = em.createQuery("from Customer c join fetch c.address join fetch c.books b join fetch b.author", Customer.class); 173 | 174 | System.out.println("1.................."); 175 | List customers = query.getResultList(); 176 | System.out.println("2.................."); 177 | for (Customer c : customers) { 178 | System.out.println("3.................."); 179 | System.out.println(c.getAddress().getCity()); 180 | System.out.println("4.................."); 181 | List books = c.getBooks(); 182 | System.out.println("5.................."); 183 | for (Book book : books) { 184 | System.out.println(); 185 | System.out.println("6.................."); 186 | System.out.println(book.getAuthor().getName()); 187 | System.out.println("7.................."); 188 | System.out.println(); 189 | } 190 | } 191 | System.out.println("8.................."); 192 | 193 | 194 | em.getTransaction().commit(); 195 | em.close(); 196 | emf.close(); 197 | } 198 | 199 | private static void batchSizeORsubselect() { 200 | EntityManager em = emf.createEntityManager(); 201 | em.getTransaction().begin(); 202 | 203 | SalesRep sr1 = new SalesRep("John Willis"); 204 | SalesRep sr2 = new SalesRep("Mary Long"); 205 | SalesRep sr3 = new SalesRep("John Willis"); 206 | SalesRep sr4 = new SalesRep("Mary Long"); 207 | 208 | sr1.addCustomer(new Customer("Frank", "Brown")); 209 | sr1.addCustomer(new Customer("Jane", "Terrien")); 210 | sr2.addCustomer(new Customer("John", "Doe")); 211 | sr2.addCustomer(new Customer("Carol", "Reno")); 212 | sr3.addCustomer(new Customer("Frank 2", "Brown")); 213 | sr3.addCustomer(new Customer("Jane 2", "Terrien")); 214 | sr4.addCustomer(new Customer("John 2", "Doe")); 215 | sr4.addCustomer(new Customer("Carol 2", "Reno")); 216 | 217 | em.persist(sr1); 218 | em.persist(sr2); 219 | em.persist(sr3); 220 | em.persist(sr4); 221 | em.getTransaction().commit(); 222 | em.close(); 223 | 224 | System.out.println(); 225 | System.out.println(); 226 | 227 | em = emf.createEntityManager(); 228 | em.getTransaction().begin(); 229 | 230 | TypedQuery query = em.createQuery("from SalesRep", SalesRep.class); 231 | System.out.println("1......."); 232 | List salesReps = query.getResultList(); 233 | System.out.println("2......."); 234 | // for (SalesRep s : salesReps) { 235 | // System.out.println("3......."); 236 | // List customers = s.getCustomers(); 237 | // System.out.println(customers.get(0).getFirstName()); 238 | // System.out.println("4......."); 239 | // } 240 | 241 | salesReps.get(0).getCustomers().get(0).getFirstName(); 242 | 243 | System.out.println("5......."); 244 | 245 | 246 | em.getTransaction().commit(); 247 | em.close(); 248 | emf.close(); 249 | } 250 | 251 | 252 | public static void main(String[] args) { 253 | // populateCustomer(); 254 | // lazyorEager(); 255 | // nPlusOneProblem(); 256 | // entityGraphAndJoinFetch(); 257 | batchSizeORsubselect(); 258 | } 259 | 260 | 261 | } 262 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/Author.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | 7 | import javax.persistence.Entity; 8 | import javax.persistence.GeneratedValue; 9 | import javax.persistence.Id; 10 | 11 | @Setter 12 | @Getter 13 | @NoArgsConstructor 14 | @Entity 15 | public class Author { 16 | @Id 17 | @GeneratedValue 18 | private Long id; 19 | private String name; 20 | 21 | public Author(String name) { 22 | this.name = name; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/Book.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | 7 | import javax.persistence.CascadeType; 8 | import javax.persistence.Entity; 9 | import javax.persistence.GeneratedValue; 10 | import javax.persistence.Id; 11 | import javax.persistence.OneToOne; 12 | 13 | @Setter 14 | @Getter 15 | @NoArgsConstructor 16 | @Entity 17 | public class Book { 18 | @Id 19 | @GeneratedValue 20 | private Long id; 21 | private String name; 22 | 23 | @OneToOne(cascade = CascadeType.ALL) 24 | private Author author; 25 | 26 | public Book(String name) { 27 | this.name = name; 28 | } 29 | 30 | public Book(String name, Author author) { 31 | this.name = name; 32 | this.author = author; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/Customer.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import javax.persistence.CascadeType; 7 | import javax.persistence.Entity; 8 | import javax.persistence.FetchType; 9 | import javax.persistence.GeneratedValue; 10 | import javax.persistence.Id; 11 | import javax.persistence.JoinColumn; 12 | import javax.persistence.ManyToOne; 13 | import javax.persistence.OneToMany; 14 | import javax.persistence.OneToOne; 15 | 16 | import lombok.Getter; 17 | import lombok.NoArgsConstructor; 18 | import lombok.Setter; 19 | import org.hibernate.annotations.LazyCollection; 20 | import org.hibernate.annotations.LazyCollectionOption; 21 | 22 | @Setter 23 | @Getter 24 | @NoArgsConstructor 25 | @Entity 26 | public class Customer { 27 | @Id 28 | @GeneratedValue 29 | private Long id; 30 | private String firstName; 31 | private String lastName; 32 | 33 | @OneToOne(cascade = CascadeType.ALL) 34 | private Address address; 35 | 36 | // @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER) 37 | @OneToMany(cascade = CascadeType.PERSIST) 38 | @JoinColumn 39 | @LazyCollection(LazyCollectionOption.EXTRA) 40 | private List books = new ArrayList<>(); 41 | 42 | @OneToMany(cascade = CascadeType.ALL) 43 | @JoinColumn 44 | private List movies = new ArrayList<>(); 45 | 46 | @ManyToOne(cascade = CascadeType.ALL) 47 | private SalesRep salesRep; 48 | 49 | public Customer(String firstName, String lastName) { 50 | this.firstName = firstName; 51 | this.lastName = lastName; 52 | } 53 | 54 | public void addBook(Book book) { 55 | books.add(book); 56 | } 57 | 58 | public boolean addMovie(Movie m) { 59 | return movies.add(m); 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/Movie.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | 7 | import javax.persistence.Entity; 8 | import javax.persistence.GeneratedValue; 9 | import javax.persistence.Id; 10 | 11 | @Setter 12 | @Getter 13 | @NoArgsConstructor 14 | @Entity 15 | public class Movie { 16 | @Id 17 | @GeneratedValue 18 | private Long id; 19 | private String name; 20 | 21 | public Movie(String name) { 22 | 23 | this.name = name; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /hibernatedemo7/src/main/java/xing/rujuan/SalesRep.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | import org.hibernate.annotations.BatchSize; 8 | import org.hibernate.annotations.Fetch; 9 | import org.hibernate.annotations.FetchMode; 10 | 11 | import javax.persistence.*; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Setter 16 | @Getter 17 | @ToString 18 | @NoArgsConstructor 19 | @Entity 20 | public class SalesRep { 21 | @Id 22 | @GeneratedValue 23 | private Long id; 24 | private String name; 25 | 26 | @OneToMany(mappedBy = "salesRep", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 27 | // @BatchSize(size = 3) 28 | @Fetch(FetchMode.SUBSELECT) 29 | private List customers = new ArrayList<>(); 30 | 31 | @OneToOne(cascade = CascadeType.ALL) 32 | private Address address; 33 | 34 | public SalesRep(String name) { 35 | this.name = name; 36 | } 37 | 38 | public boolean addCustomer(Customer c) { 39 | if (customers.add(c)) { 40 | c.setSalesRep(this); 41 | return true; 42 | } 43 | return false; 44 | } 45 | 46 | 47 | } 48 | -------------------------------------------------------------------------------- /hibernatedemo7/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 | 25 | -------------------------------------------------------------------------------- /hibernatedemo8/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | xing.rujuan 8 | hibernatedemo8 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 | 46 | -------------------------------------------------------------------------------- /hibernatedemo8/src/main/java/xing/rujuan/App.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.*; 6 | 7 | public class App { 8 | 9 | private static EntityManagerFactory emf; 10 | 11 | public static void main(String[] args) throws Exception { 12 | emf = Persistence.createEntityManagerFactory("edu.mum.cs"); 13 | 14 | long start = System.nanoTime(); 15 | EntityManager em = emf.createEntityManager(); 16 | em.getTransaction().begin(); 17 | 18 | TypedQuery query = em.createQuery("from Owner", Owner.class); 19 | 20 | 21 | 22 | 23 | em.getTransaction().commit(); 24 | em.close(); 25 | long stop = System.nanoTime(); 26 | 27 | // stop time 28 | System.out.println("To fetch this data from the database took " + (stop - start) / 1000000 + " milliseconds."); 29 | System.exit(0); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /hibernatedemo8/src/main/java/xing/rujuan/Owner.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | import org.hibernate.annotations.*; 6 | 7 | import java.util.List; 8 | 9 | import javax.persistence.CascadeType; 10 | import javax.persistence.Entity; 11 | import javax.persistence.GeneratedValue; 12 | import javax.persistence.GenerationType; 13 | import javax.persistence.Id; 14 | import javax.persistence.JoinColumn; 15 | import javax.persistence.NamedQuery; 16 | import javax.persistence.OneToMany; 17 | 18 | @Data 19 | @NoArgsConstructor 20 | @Entity 21 | public class Owner { 22 | @Id 23 | @GeneratedValue(strategy = GenerationType.IDENTITY) 24 | private int id; 25 | private String name; 26 | 27 | @OneToMany(cascade = {CascadeType.PERSIST}) 28 | @JoinColumn(name = "clientid") 29 | private List pets; 30 | 31 | public Owner(String name) { 32 | this.name = name; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /hibernatedemo8/src/main/java/xing/rujuan/Pet.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | 7 | import javax.persistence.Entity; 8 | import javax.persistence.GeneratedValue; 9 | import javax.persistence.GenerationType; 10 | import javax.persistence.Id; 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @Entity 15 | public class Pet { 16 | 17 | @Id 18 | @GeneratedValue(strategy = GenerationType.IDENTITY) 19 | private int id; 20 | private String name; 21 | 22 | public Pet(String name) { 23 | this.name = name; 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /hibernatedemo8/src/main/java/xing/rujuan/Populate.java: -------------------------------------------------------------------------------- 1 | package xing.rujuan; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import javax.persistence.EntityManager; 7 | import javax.persistence.EntityManagerFactory; 8 | import javax.persistence.Persistence; 9 | 10 | public class Populate { 11 | 12 | private static EntityManagerFactory emf; 13 | 14 | public static void main(String[] args) throws Exception { 15 | emf = Persistence.createEntityManagerFactory("edu.mum.cs"); 16 | 17 | EntityManager em = emf.createEntityManager(); 18 | em.getTransaction().begin(); 19 | 20 | for (int x = 0; x < 100000; x++) { 21 | Owner owner = new Owner("Frank" + x); 22 | List petlist = new ArrayList(); 23 | for (int y = 0; y < 10; y++) { 24 | Pet pet = new Pet("Baby" + x + "-" + y); 25 | petlist.add(pet); 26 | } 27 | owner.setPets(petlist); 28 | em.persist(owner); 29 | } 30 | 31 | em.getTransaction().commit(); 32 | em.close(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /hibernatedemo8/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 | 25 | --------------------------------------------------------------------------------