From d8584d0664a808788f31545fc897ff0755219da4 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 27 Jan 2017 15:11:58 +0000 Subject: [PATCH] "order feature" --- .project | 11 ++ assembly.xml | 18 ++ java/bookstore/Author.java | 53 ++++++ java/bookstore/Book.java | 83 ++++++++++ java/bookstore/Customers.java | 89 ++++++++++ java/bookstore/OrderLines.java | 52 ++++++ java/bookstore/Orders.java | 78 +++++++++ java/bookstore/Store.java | 40 +++++ java/bookstore/other/Main.java | 78 +++++++++ java/bookstore/other/StoreService.java | 42 +++++ java/com/qa/persistence/CD.java | 123 ++++++++++++++ java/com/qa/persistence/Item.java | 111 +++++++++++++ java/com/qa/persistence/Musician.java | 150 +++++++++++++++++ java/com/qa/persistence/demo01/CDService.java | 41 +++++ java/com/qa/persistence/demo01/Main.java | 61 +++++++ module04-create.ddl | 8 + module04-drop.ddl | 7 + pom.xml | 155 ++++++++++++++++++ resources/META-INF/persistence.xml | 25 +++ src/main/java/bookstore/Author.java | 53 ++++++ src/main/java/bookstore/Book.java | 83 ++++++++++ src/main/java/bookstore/Customers.java | 89 ++++++++++ src/main/java/bookstore/OrderLines.java | 52 ++++++ src/main/java/bookstore/Orders.java | 78 +++++++++ src/main/java/bookstore/Store.java | 40 +++++ src/main/java/bookstore/other/Main.java | 78 +++++++++ .../java/bookstore/other/StoreService.java | 42 +++++ src/main/java/com/qa/persistence/CD.java | 123 ++++++++++++++ src/main/java/com/qa/persistence/Item.java | 111 +++++++++++++ .../java/com/qa/persistence/Musician.java | 150 +++++++++++++++++ .../com/qa/persistence/demo01/CDService.java | 41 +++++ .../java/com/qa/persistence/demo01/Main.java | 61 +++++++ src/main/resources/META-INF/persistence.xml | 25 +++ target/classes/META-INF/persistence.xml | 25 +++ target/classes/bookstore/Author.class | Bin 0 -> 1254 bytes target/classes/bookstore/Book.class | Bin 0 -> 1780 bytes target/classes/bookstore/Customers.class | Bin 0 -> 2117 bytes target/classes/bookstore/OrderLines.class | Bin 0 -> 1209 bytes target/classes/bookstore/Orders.class | Bin 0 -> 2133 bytes target/classes/bookstore/Store.class | Bin 0 -> 961 bytes target/classes/bookstore/other/Main.class | Bin 0 -> 3690 bytes .../bookstore/other/StoreService.class | Bin 0 -> 1119 bytes target/classes/com/qa/persistence/CD.class | Bin 0 -> 3365 bytes target/classes/com/qa/persistence/Item.class | Bin 0 -> 2890 bytes .../classes/com/qa/persistence/Musician.class | Bin 0 -> 3605 bytes .../com/qa/persistence/demo01/CDService.class | Bin 0 -> 1148 bytes .../com/qa/persistence/demo01/Main.class | Bin 0 -> 2975 bytes target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 5 + target/module04-1.0.jar | Bin 0 -> 10106 bytes 51 files changed, 2286 insertions(+) create mode 100644 .project create mode 100644 assembly.xml create mode 100644 java/bookstore/Author.java create mode 100644 java/bookstore/Book.java create mode 100644 java/bookstore/Customers.java create mode 100644 java/bookstore/OrderLines.java create mode 100644 java/bookstore/Orders.java create mode 100644 java/bookstore/Store.java create mode 100644 java/bookstore/other/Main.java create mode 100644 java/bookstore/other/StoreService.java create mode 100644 java/com/qa/persistence/CD.java create mode 100644 java/com/qa/persistence/Item.java create mode 100644 java/com/qa/persistence/Musician.java create mode 100644 java/com/qa/persistence/demo01/CDService.java create mode 100644 java/com/qa/persistence/demo01/Main.java create mode 100644 module04-create.ddl create mode 100644 module04-drop.ddl create mode 100644 pom.xml create mode 100644 resources/META-INF/persistence.xml create mode 100644 src/main/java/bookstore/Author.java create mode 100644 src/main/java/bookstore/Book.java create mode 100644 src/main/java/bookstore/Customers.java create mode 100644 src/main/java/bookstore/OrderLines.java create mode 100644 src/main/java/bookstore/Orders.java create mode 100644 src/main/java/bookstore/Store.java create mode 100644 src/main/java/bookstore/other/Main.java create mode 100644 src/main/java/bookstore/other/StoreService.java create mode 100644 src/main/java/com/qa/persistence/CD.java create mode 100644 src/main/java/com/qa/persistence/Item.java create mode 100644 src/main/java/com/qa/persistence/Musician.java create mode 100644 src/main/java/com/qa/persistence/demo01/CDService.java create mode 100644 src/main/java/com/qa/persistence/demo01/Main.java create mode 100644 src/main/resources/META-INF/persistence.xml create mode 100644 target/classes/META-INF/persistence.xml create mode 100644 target/classes/bookstore/Author.class create mode 100644 target/classes/bookstore/Book.class create mode 100644 target/classes/bookstore/Customers.class create mode 100644 target/classes/bookstore/OrderLines.class create mode 100644 target/classes/bookstore/Orders.class create mode 100644 target/classes/bookstore/Store.class create mode 100644 target/classes/bookstore/other/Main.class create mode 100644 target/classes/bookstore/other/StoreService.class create mode 100644 target/classes/com/qa/persistence/CD.class create mode 100644 target/classes/com/qa/persistence/Item.class create mode 100644 target/classes/com/qa/persistence/Musician.class create mode 100644 target/classes/com/qa/persistence/demo01/CDService.class create mode 100644 target/classes/com/qa/persistence/demo01/Main.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/module04-1.0.jar diff --git a/.project b/.project new file mode 100644 index 0000000..631bea5 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + Bookstore.git + + + + + + + + diff --git a/assembly.xml b/assembly.xml new file mode 100644 index 0000000..4dd0ed6 --- /dev/null +++ b/assembly.xml @@ -0,0 +1,18 @@ + + source + / + + zip + + + + + readme.md + assembly.xml + pom.xml + src/ + + + + \ No newline at end of file diff --git a/java/bookstore/Author.java b/java/bookstore/Author.java new file mode 100644 index 0000000..268d64f --- /dev/null +++ b/java/bookstore/Author.java @@ -0,0 +1,53 @@ +package bookstore; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Author { + + @Id + @GeneratedValue + private Long id; + + @Column(name="first_name", length=50) + protected String firstName; + + @Column(name="surname", length=50) + protected String surname; + + public Author(String firstName, String surname) { + this.firstName = firstName; + this.surname = surname; + } + + public Author(){ + + } + + public Long getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + +} diff --git a/java/bookstore/Book.java b/java/bookstore/Book.java new file mode 100644 index 0000000..9ef5dec --- /dev/null +++ b/java/bookstore/Book.java @@ -0,0 +1,83 @@ +package bookstore; + + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Book { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "title", length = 50) + protected String title; + + @Column(name = "genre", length = 50) + protected String genre; + + @Column(name = "author", length = 50) + protected Author author; + + @Column(name = "format", length = 50) + protected String format; + + public Book(String title, String genre, Author author, String format) { + this.title = title; + this.genre = genre; + this.author = author; + this.format = format; + } + + public Book(){ + + } + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(Author author) { + this.author = author; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + + + + + +} diff --git a/java/bookstore/Customers.java b/java/bookstore/Customers.java new file mode 100644 index 0000000..0e5460b --- /dev/null +++ b/java/bookstore/Customers.java @@ -0,0 +1,89 @@ +package bookstore; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Customers { + + @Id + @GeneratedValue + private Long id; + + @Column(name="first_name",length=50) + protected String firstName; + + @Column(name="surname", length=50) + protected String surname; + + @Column(name="member", length=10) + protected Boolean member; + + @Column(name="email", length=50) + protected String email; + + @Column(name="password", length = 50) + protected String password; + + public Customers() { + + } + + public Customers(String firstName, String surname, Boolean member, String email, String password) { + this.firstName = firstName; + this.surname = surname; + this.member = member; + this.email = email; + this.password = password; + } + + public Long getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getSurame() { + return surname; + } + + public void setSurame(String surname) { + this.surname = surname; + } + + public boolean getMember() { + return member; + } + + public void setMember(Boolean member) { + this.member = member; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + +} diff --git a/java/bookstore/OrderLines.java b/java/bookstore/OrderLines.java new file mode 100644 index 0000000..034c704 --- /dev/null +++ b/java/bookstore/OrderLines.java @@ -0,0 +1,52 @@ +package bookstore; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class OrderLines { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "book_id", length = 50) + protected Long bookId; + + @Column(name = "quantity", length =50) + protected int quantity; + + public OrderLines(){ + + } + + public OrderLines(Long bookId, int quantity){ + this.bookId = bookId; + this.quantity = quantity; + } + + public Long getId() { + return id; + } + + public Long getBookId() { + return bookId; + } + + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } +} diff --git a/java/bookstore/Orders.java b/java/bookstore/Orders.java new file mode 100644 index 0000000..430e1ca --- /dev/null +++ b/java/bookstore/Orders.java @@ -0,0 +1,78 @@ +package bookstore; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; +@Entity +public class Orders { + + @Id + @GeneratedValue + private Long id; + + @OneToMany(cascade = CascadeType.ALL) + private Set orderLines = new HashSet<>(); + + @Column(name = "address", length = 50) + private String address; + + @Column(name = "customer_id", length = 50) + private Long customerId; + + @Column(name = "store_id", length=50) + private Long storeId; + + public Orders(){ + + } + + public Orders(String address, Long customerId){ + this.address = address; + this.customerId = customerId; + } + + public Long getId() { + return id; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public Set getOrderLines() { + return orderLines; + } + + public void setOrderLines(Set orderLines) { + this.orderLines = orderLines; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + +} diff --git a/java/bookstore/Store.java b/java/bookstore/Store.java new file mode 100644 index 0000000..dd0146d --- /dev/null +++ b/java/bookstore/Store.java @@ -0,0 +1,40 @@ +package bookstore; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Store { + + @Id + @GeneratedValue + private Long id; + + @Column(name="location", length=50) + protected String location; + + public Store() { + + } + + public Store(String location) { + this.location = location; + } + + public Long getId() { + return id; + } + + public String getLocation() { + return location; + } + + public void setLcoation(String location) { + this.location = location; + } + +} diff --git a/java/bookstore/other/Main.java b/java/bookstore/other/Main.java new file mode 100644 index 0000000..f5c9265 --- /dev/null +++ b/java/bookstore/other/Main.java @@ -0,0 +1,78 @@ +package bookstore.other; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +import bookstore.Author; +import bookstore.Book; +import bookstore.Customers; +import bookstore.OrderLines; +import bookstore.Orders; +import bookstore.Store; + + +/*import com.qa.persistence.CD; +import com.qa.persistence.Musician; +import com.qa.persistence.demo01.CDService; +import com.qa.persistence.demo01.Main;*/ + + +public class Main { + public static void main(String[] args) { + // TODO Auto-generated method stub + System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n"); + + EntityManagerFactory emf = Persistence.createEntityManagerFactory("module04-persistence-unit"); + EntityManager em = emf.createEntityManager(); + EntityTransaction tx = em.getTransaction(); + + StoreService service = new StoreService(em); + + // Creates and persists a CD + tx.begin(); + Set orderLines = new HashSet<>(); + Author author1 = new Author("JK", "Rowling"); + Author author2 = new Author("Anthony", "Burgess"); + Book book1 = new Book("Harry Potter","fantasy",author1,"paperback"); + Book book2 = new Book("A Clockwork Orange","science fiction",author2,"paperback"); + orderLines.add(new OrderLines(book1.getId(),1)); + orderLines.add(new OrderLines(book2.getId(),1)); + Orders order1 = new Orders(); + order1.setOrderLines(orderLines); + Customers customer1 = new Customers("John","Smith",true, "jsmith@gmail.com","password"); + order1.setAddress("test address"); + order1.setCustomerId(customer1.getId()); + order1 = service.createOrder(order1); + tx.commit(); + + System.out.println("Order Persisted : " + order1); + // + tx.commit(); + + // Finds the order + order1 = service.findOrder(order1.getId()); + + System.out.println("Order Found : " + order1); + System.out.println(" Books : " + order1.getOrderLines()); + + // Removes the order + tx.begin(); + service.removeOrder(order1.getId()); + tx.commit(); + + System.out.println("Order Removed"); + + // Finds the order + order1 = service.findOrder(order1.getId()); + + System.out.println("Order Not Found : " + order1); + + em.close(); + emf.close(); + + } +} diff --git a/java/bookstore/other/StoreService.java b/java/bookstore/other/StoreService.java new file mode 100644 index 0000000..baa9dda --- /dev/null +++ b/java/bookstore/other/StoreService.java @@ -0,0 +1,42 @@ +package bookstore.other; + +import javax.persistence.EntityManager; + +import bookstore.Orders; + +public class StoreService { + + // ====================================== + // = Attributes = + // ====================================== + + private EntityManager em; + + // ====================================== + // = Constructors = + // ====================================== + + public StoreService(EntityManager em) { + this.em = em; + } + + // ====================================== + // = Public Methods = + // ====================================== + + public Orders createOrder(Orders order) { + em.persist(order); + return order; + } + + public void removeOrder(Long id) { + Orders order = em.find(Orders.class, id); + if (order != null) + em.remove(order); + } + + public Orders findOrder(Long id) { + return em.find(Orders.class, id); + } + +} diff --git a/java/com/qa/persistence/CD.java b/java/com/qa/persistence/CD.java new file mode 100644 index 0000000..bbb6a36 --- /dev/null +++ b/java/com/qa/persistence/CD.java @@ -0,0 +1,123 @@ +package com.qa.persistence; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.OneToMany; + +@Entity +public class CD extends Item { + + // ====================================== + // = Attributes = + // ====================================== + + @Column(name = "total_duration") + private Float totalDuration; + + private String genre; + + @OneToMany(cascade = CascadeType.ALL) + private Set musicians = new HashSet<>(); + + // ====================================== + // = Constructors = + // ====================================== + + public CD() { + } + + public CD(String title) { + this.title = title; + } + + public CD(String title, String genre) { + this.title = title; + this.genre = genre; + } + + public CD(String title, String description, Float unitCost, Float totalDuration, String genre) { + this.title = title; + this.description = description; + this.unitCost = unitCost; + this.totalDuration = totalDuration; + this.genre = genre; + } + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Float getUnitCost() { + return unitCost; + } + + public void setUnitCost(Float unitCost) { + this.unitCost = unitCost; + } + + public Float getTotalDuration() { + return totalDuration; + } + + public void setTotalDuration(Float totalDuration) { + this.totalDuration = totalDuration; + } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public Set getMusicians() { + return musicians; + } + + public void setMusicians(Set musicians) { + this.musicians = musicians; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("CD{"); + sb.append("id=").append(id); + sb.append(", title='").append(title).append('\''); + sb.append(", genre='").append(genre).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/com/qa/persistence/Item.java b/java/com/qa/persistence/Item.java new file mode 100644 index 0000000..fd3e3ba --- /dev/null +++ b/java/com/qa/persistence/Item.java @@ -0,0 +1,111 @@ +package com.qa.persistence; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class Item { + + // ====================================== + // = Attributes = + // ====================================== + + @Id + @GeneratedValue + protected Long id; + + @Column(length = 100) + protected String title; + + @Column(length = 3000) + protected String description; + + @Column(name = "unit_cost") + protected Float unitCost; + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Float getUnitCost() { + return unitCost; + } + + public void setUnitCost(Float unitCost) { + this.unitCost = unitCost; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Item item = (Item) o; + + if (description != null ? !description.equals(item.description) : item.description != null) + return false; + if (id != null ? !id.equals(item.id) : item.id != null) + return false; + if (!title.equals(item.title)) + return false; + if (unitCost != null ? !unitCost.equals(item.unitCost) : item.unitCost != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + title.hashCode(); + result = 31 * result + (description != null ? description.hashCode() : 0); + result = 31 * result + (unitCost != null ? unitCost.hashCode() : 0); + return result; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("Item{"); + sb.append("id=").append(id); + sb.append(", title='").append(title).append('\''); + sb.append(", description='").append(description).append('\''); + sb.append(", unitCost=").append(unitCost); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/com/qa/persistence/Musician.java b/java/com/qa/persistence/Musician.java new file mode 100644 index 0000000..f8bd9b5 --- /dev/null +++ b/java/com/qa/persistence/Musician.java @@ -0,0 +1,150 @@ +package com.qa.persistence; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Musician { + + // ====================================== + // = Attributes = + // ====================================== + + @Id + @GeneratedValue + private Long id; + + @Column(name = "first_name", length = 50) + protected String firstName; + + @Column(name = "last_name", length = 50) + protected String lastName; + + @Column(length = 5000) + protected String bio; + + @Column(name = "date_of_birth") + @Temporal(TemporalType.DATE) + protected Date dateOfBirth; + + @Column(name = "Dead_or_Alive", length = 50) + protected String deadOrAlive; + + @Transient + protected Integer age; + + @Column(name = "preferred_instrument") + private String preferredInstrument; + + // ====================================== + // = Constructors = + // ====================================== + + public Musician() { + } + + public Musician(String firstName, String lastName, String bio, Date dateOfBirth, String deadOrAlive, Integer age, + String preferredInstrument) { + this.firstName = firstName; + this.lastName = lastName; + this.bio = bio; + this.dateOfBirth = dateOfBirth; + this.deadOrAlive = deadOrAlive; + this.age = age; + this.preferredInstrument = preferredInstrument; + } + + public Musician(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getBio() { + return bio; + } + + public void setBio(String bio) { + this.bio = bio; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getDeadOrAlive() { + return deadOrAlive; + } + + public void setDeadOrAlive(String deadOrAlive) { + this.deadOrAlive = deadOrAlive; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public String getPreferredInstrument() { + return preferredInstrument; + } + + public void setPreferredInstrument(String preferredInstrument) { + this.preferredInstrument = preferredInstrument; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("Musician{"); + sb.append("id=").append(id); + sb.append(", firstName='").append(firstName).append('\''); + sb.append(", lastName='").append(lastName).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/com/qa/persistence/demo01/CDService.java b/java/com/qa/persistence/demo01/CDService.java new file mode 100644 index 0000000..ee9efa3 --- /dev/null +++ b/java/com/qa/persistence/demo01/CDService.java @@ -0,0 +1,41 @@ +package com.qa.persistence.demo01; + +import javax.persistence.EntityManager; + +import com.qa.persistence.CD; + +public class CDService { + + // ====================================== + // = Attributes = + // ====================================== + + private EntityManager em; + + // ====================================== + // = Constructors = + // ====================================== + + public CDService(EntityManager em) { + this.em = em; + } + + // ====================================== + // = Public Methods = + // ====================================== + + public CD createCD(CD cd) { + em.persist(cd); + return cd; + } + + public void removeCD(Long id) { + CD cd = em.find(CD.class, id); + if (cd != null) + em.remove(cd); + } + + public CD findCD(Long id) { + return em.find(CD.class, id); + } +} \ No newline at end of file diff --git a/java/com/qa/persistence/demo01/Main.java b/java/com/qa/persistence/demo01/Main.java new file mode 100644 index 0000000..afa496e --- /dev/null +++ b/java/com/qa/persistence/demo01/Main.java @@ -0,0 +1,61 @@ +package com.qa.persistence.demo01; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +import com.qa.persistence.CD; +import com.qa.persistence.Musician; + +public class Main { + + public static void main(String[] args) { + + System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n"); + + EntityManagerFactory emf = Persistence.createEntityManagerFactory("module04-persistence-unit"); + EntityManager em = emf.createEntityManager(); + EntityTransaction tx = em.getTransaction(); + + CDService service = new CDService(em); + + // Creates and persists a CD + tx.begin(); + Set beatles = new HashSet<>(); + beatles.add(new Musician("John", "Lennon")); //Dead - Assassinated! + beatles.add(new Musician("Paul", "McCartney")); //Alive + beatles.add(new Musician("Ringo", "Starr")); //Alive + beatles.add(new Musician("Georges", "Harrison")); //Dead + CD sergentPepper = new CD("Sergent Pepper"); + sergentPepper.setMusicians(beatles); + sergentPepper = service.createCD(sergentPepper); + tx.commit(); + + System.out.println("CD Persisted : " + sergentPepper); + + // Finds the cd + sergentPepper = service.findCD(sergentPepper.getId()); + + System.out.println("CD Found : " + sergentPepper); + System.out.println(" Musicians : " + sergentPepper.getMusicians()); + + // Removes the cd + tx.begin(); + service.removeCD(sergentPepper.getId()); + tx.commit(); + + System.out.println("CD Removed"); + + // Finds the cd + sergentPepper = service.findCD(sergentPepper.getId()); + + System.out.println("CD Not Found : " + sergentPepper); + + em.close(); + emf.close(); + } +} diff --git a/module04-create.ddl b/module04-create.ddl new file mode 100644 index 0000000..db2c6c1 --- /dev/null +++ b/module04-create.ddl @@ -0,0 +1,8 @@ +CREATE TABLE CD (ID BIGINT NOT NULL, DESCRIPTION VARCHAR(3000), GENRE VARCHAR(255), TITLE VARCHAR(100), total_duration FLOAT, unit_cost FLOAT, PRIMARY KEY (ID)) +CREATE TABLE MUSICIAN (ID BIGINT NOT NULL, BIO VARCHAR(5000), date_of_birth DATE, first_name VARCHAR(50), last_name VARCHAR(50), preferred_instrument VARCHAR(255), PRIMARY KEY (ID)) +CREATE TABLE ITEM (ID BIGINT NOT NULL, DESCRIPTION VARCHAR(3000), TITLE VARCHAR(100), unit_cost FLOAT, PRIMARY KEY (ID)) +CREATE TABLE CD_MUSICIAN (CD_ID BIGINT NOT NULL, musicians_ID BIGINT NOT NULL, PRIMARY KEY (CD_ID, musicians_ID)) +ALTER TABLE CD_MUSICIAN ADD CONSTRAINT CD_MUSICIAN_CD_ID FOREIGN KEY (CD_ID) REFERENCES CD (ID) +ALTER TABLE CD_MUSICIAN ADD CONSTRAINT CDMSICIANmsciansID FOREIGN KEY (musicians_ID) REFERENCES MUSICIAN (ID) +CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME)) +INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0) diff --git a/module04-drop.ddl b/module04-drop.ddl new file mode 100644 index 0000000..6499f06 --- /dev/null +++ b/module04-drop.ddl @@ -0,0 +1,7 @@ +ALTER TABLE CD_MUSICIAN DROP CONSTRAINT CD_MUSICIAN_CD_ID +ALTER TABLE CD_MUSICIAN DROP CONSTRAINT CDMSICIANmsciansID +DROP TABLE CD +DROP TABLE MUSICIAN +DROP TABLE ITEM +DROP TABLE CD_MUSICIAN +DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN' diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..eff57a2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,155 @@ + + + + 4.0.0 + com.qa.persistence + module04 + jar + 1.0 + This is an example project + + + 1.7 + + 1.1.0.Final + 2.5.1 + 4.3.1.Final + 10.10.1.1 + + 4.11 + + 2.4 + 2.4 + 3.1 + 2.8 + 2.2 + 2.16 + 2.9.1 + 1.2.1 + 2.4 + + UTF-8 + UTF-8 + + + + + + org.apache.derby + derbyclient + ${version.derby} + + + + junit + junit + ${version.junit} + test + + + + + + + eclipselink + + true + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + ${version.eclipselink} + + + + + + hibernate + + + org.hibernate + hibernate-entitymanager + ${version.hibernate} + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.maven.surefire.plugin} + + -Duser.language=en -Duser.country=EN + + + + org.apache.maven.plugins + maven-help-plugin + ${version.maven.help.plugin} + + + org.apache.maven.plugins + maven-compiler-plugin + ${version.maven.compiler.plugin} + true + + ${version.java} + ${version.java} + + + + org.apache.maven.plugins + maven-jar-plugin + ${version.maven.jar.plugin} + + + org.apache.maven.plugins + maven-javadoc-plugin + ${version.maven.javadoc.plugin} + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency.plugin} + + + org.codehaus.mojo + exec-maven-plugin + ${version.maven.exec.plugin} + + + + java + + + + + -Duser.language=en -Duser.country=EN + + + + com.pluralsight.persistence.module04.demo04.Main + + + + org.apache.maven.plugins + maven-assembly-plugin + ${version.maven.assembly.plugin} + + demos + false + + assembly.xml + + + + + + + \ No newline at end of file diff --git a/resources/META-INF/persistence.xml b/resources/META-INF/persistence.xml new file mode 100644 index 0000000..474ce35 --- /dev/null +++ b/resources/META-INF/persistence.xml @@ -0,0 +1,25 @@ + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + com.qa.persistence.CD + com.qa.persistence.Musician + com.qa.persistence.Item + + + + + + + + + + + + + diff --git a/src/main/java/bookstore/Author.java b/src/main/java/bookstore/Author.java new file mode 100644 index 0000000..268d64f --- /dev/null +++ b/src/main/java/bookstore/Author.java @@ -0,0 +1,53 @@ +package bookstore; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Author { + + @Id + @GeneratedValue + private Long id; + + @Column(name="first_name", length=50) + protected String firstName; + + @Column(name="surname", length=50) + protected String surname; + + public Author(String firstName, String surname) { + this.firstName = firstName; + this.surname = surname; + } + + public Author(){ + + } + + public Long getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + +} diff --git a/src/main/java/bookstore/Book.java b/src/main/java/bookstore/Book.java new file mode 100644 index 0000000..9ef5dec --- /dev/null +++ b/src/main/java/bookstore/Book.java @@ -0,0 +1,83 @@ +package bookstore; + + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Book { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "title", length = 50) + protected String title; + + @Column(name = "genre", length = 50) + protected String genre; + + @Column(name = "author", length = 50) + protected Author author; + + @Column(name = "format", length = 50) + protected String format; + + public Book(String title, String genre, Author author, String format) { + this.title = title; + this.genre = genre; + this.author = author; + this.format = format; + } + + public Book(){ + + } + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(Author author) { + this.author = author; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + + + + + +} diff --git a/src/main/java/bookstore/Customers.java b/src/main/java/bookstore/Customers.java new file mode 100644 index 0000000..0e5460b --- /dev/null +++ b/src/main/java/bookstore/Customers.java @@ -0,0 +1,89 @@ +package bookstore; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Customers { + + @Id + @GeneratedValue + private Long id; + + @Column(name="first_name",length=50) + protected String firstName; + + @Column(name="surname", length=50) + protected String surname; + + @Column(name="member", length=10) + protected Boolean member; + + @Column(name="email", length=50) + protected String email; + + @Column(name="password", length = 50) + protected String password; + + public Customers() { + + } + + public Customers(String firstName, String surname, Boolean member, String email, String password) { + this.firstName = firstName; + this.surname = surname; + this.member = member; + this.email = email; + this.password = password; + } + + public Long getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getSurame() { + return surname; + } + + public void setSurame(String surname) { + this.surname = surname; + } + + public boolean getMember() { + return member; + } + + public void setMember(Boolean member) { + this.member = member; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + +} diff --git a/src/main/java/bookstore/OrderLines.java b/src/main/java/bookstore/OrderLines.java new file mode 100644 index 0000000..034c704 --- /dev/null +++ b/src/main/java/bookstore/OrderLines.java @@ -0,0 +1,52 @@ +package bookstore; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class OrderLines { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "book_id", length = 50) + protected Long bookId; + + @Column(name = "quantity", length =50) + protected int quantity; + + public OrderLines(){ + + } + + public OrderLines(Long bookId, int quantity){ + this.bookId = bookId; + this.quantity = quantity; + } + + public Long getId() { + return id; + } + + public Long getBookId() { + return bookId; + } + + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } +} diff --git a/src/main/java/bookstore/Orders.java b/src/main/java/bookstore/Orders.java new file mode 100644 index 0000000..430e1ca --- /dev/null +++ b/src/main/java/bookstore/Orders.java @@ -0,0 +1,78 @@ +package bookstore; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; +@Entity +public class Orders { + + @Id + @GeneratedValue + private Long id; + + @OneToMany(cascade = CascadeType.ALL) + private Set orderLines = new HashSet<>(); + + @Column(name = "address", length = 50) + private String address; + + @Column(name = "customer_id", length = 50) + private Long customerId; + + @Column(name = "store_id", length=50) + private Long storeId; + + public Orders(){ + + } + + public Orders(String address, Long customerId){ + this.address = address; + this.customerId = customerId; + } + + public Long getId() { + return id; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public Set getOrderLines() { + return orderLines; + } + + public void setOrderLines(Set orderLines) { + this.orderLines = orderLines; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + +} diff --git a/src/main/java/bookstore/Store.java b/src/main/java/bookstore/Store.java new file mode 100644 index 0000000..dd0146d --- /dev/null +++ b/src/main/java/bookstore/Store.java @@ -0,0 +1,40 @@ +package bookstore; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Store { + + @Id + @GeneratedValue + private Long id; + + @Column(name="location", length=50) + protected String location; + + public Store() { + + } + + public Store(String location) { + this.location = location; + } + + public Long getId() { + return id; + } + + public String getLocation() { + return location; + } + + public void setLcoation(String location) { + this.location = location; + } + +} diff --git a/src/main/java/bookstore/other/Main.java b/src/main/java/bookstore/other/Main.java new file mode 100644 index 0000000..f5c9265 --- /dev/null +++ b/src/main/java/bookstore/other/Main.java @@ -0,0 +1,78 @@ +package bookstore.other; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +import bookstore.Author; +import bookstore.Book; +import bookstore.Customers; +import bookstore.OrderLines; +import bookstore.Orders; +import bookstore.Store; + + +/*import com.qa.persistence.CD; +import com.qa.persistence.Musician; +import com.qa.persistence.demo01.CDService; +import com.qa.persistence.demo01.Main;*/ + + +public class Main { + public static void main(String[] args) { + // TODO Auto-generated method stub + System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n"); + + EntityManagerFactory emf = Persistence.createEntityManagerFactory("module04-persistence-unit"); + EntityManager em = emf.createEntityManager(); + EntityTransaction tx = em.getTransaction(); + + StoreService service = new StoreService(em); + + // Creates and persists a CD + tx.begin(); + Set orderLines = new HashSet<>(); + Author author1 = new Author("JK", "Rowling"); + Author author2 = new Author("Anthony", "Burgess"); + Book book1 = new Book("Harry Potter","fantasy",author1,"paperback"); + Book book2 = new Book("A Clockwork Orange","science fiction",author2,"paperback"); + orderLines.add(new OrderLines(book1.getId(),1)); + orderLines.add(new OrderLines(book2.getId(),1)); + Orders order1 = new Orders(); + order1.setOrderLines(orderLines); + Customers customer1 = new Customers("John","Smith",true, "jsmith@gmail.com","password"); + order1.setAddress("test address"); + order1.setCustomerId(customer1.getId()); + order1 = service.createOrder(order1); + tx.commit(); + + System.out.println("Order Persisted : " + order1); + // + tx.commit(); + + // Finds the order + order1 = service.findOrder(order1.getId()); + + System.out.println("Order Found : " + order1); + System.out.println(" Books : " + order1.getOrderLines()); + + // Removes the order + tx.begin(); + service.removeOrder(order1.getId()); + tx.commit(); + + System.out.println("Order Removed"); + + // Finds the order + order1 = service.findOrder(order1.getId()); + + System.out.println("Order Not Found : " + order1); + + em.close(); + emf.close(); + + } +} diff --git a/src/main/java/bookstore/other/StoreService.java b/src/main/java/bookstore/other/StoreService.java new file mode 100644 index 0000000..baa9dda --- /dev/null +++ b/src/main/java/bookstore/other/StoreService.java @@ -0,0 +1,42 @@ +package bookstore.other; + +import javax.persistence.EntityManager; + +import bookstore.Orders; + +public class StoreService { + + // ====================================== + // = Attributes = + // ====================================== + + private EntityManager em; + + // ====================================== + // = Constructors = + // ====================================== + + public StoreService(EntityManager em) { + this.em = em; + } + + // ====================================== + // = Public Methods = + // ====================================== + + public Orders createOrder(Orders order) { + em.persist(order); + return order; + } + + public void removeOrder(Long id) { + Orders order = em.find(Orders.class, id); + if (order != null) + em.remove(order); + } + + public Orders findOrder(Long id) { + return em.find(Orders.class, id); + } + +} diff --git a/src/main/java/com/qa/persistence/CD.java b/src/main/java/com/qa/persistence/CD.java new file mode 100644 index 0000000..bbb6a36 --- /dev/null +++ b/src/main/java/com/qa/persistence/CD.java @@ -0,0 +1,123 @@ +package com.qa.persistence; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.OneToMany; + +@Entity +public class CD extends Item { + + // ====================================== + // = Attributes = + // ====================================== + + @Column(name = "total_duration") + private Float totalDuration; + + private String genre; + + @OneToMany(cascade = CascadeType.ALL) + private Set musicians = new HashSet<>(); + + // ====================================== + // = Constructors = + // ====================================== + + public CD() { + } + + public CD(String title) { + this.title = title; + } + + public CD(String title, String genre) { + this.title = title; + this.genre = genre; + } + + public CD(String title, String description, Float unitCost, Float totalDuration, String genre) { + this.title = title; + this.description = description; + this.unitCost = unitCost; + this.totalDuration = totalDuration; + this.genre = genre; + } + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Float getUnitCost() { + return unitCost; + } + + public void setUnitCost(Float unitCost) { + this.unitCost = unitCost; + } + + public Float getTotalDuration() { + return totalDuration; + } + + public void setTotalDuration(Float totalDuration) { + this.totalDuration = totalDuration; + } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public Set getMusicians() { + return musicians; + } + + public void setMusicians(Set musicians) { + this.musicians = musicians; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("CD{"); + sb.append("id=").append(id); + sb.append(", title='").append(title).append('\''); + sb.append(", genre='").append(genre).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/qa/persistence/Item.java b/src/main/java/com/qa/persistence/Item.java new file mode 100644 index 0000000..fd3e3ba --- /dev/null +++ b/src/main/java/com/qa/persistence/Item.java @@ -0,0 +1,111 @@ +package com.qa.persistence; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class Item { + + // ====================================== + // = Attributes = + // ====================================== + + @Id + @GeneratedValue + protected Long id; + + @Column(length = 100) + protected String title; + + @Column(length = 3000) + protected String description; + + @Column(name = "unit_cost") + protected Float unitCost; + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Float getUnitCost() { + return unitCost; + } + + public void setUnitCost(Float unitCost) { + this.unitCost = unitCost; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Item item = (Item) o; + + if (description != null ? !description.equals(item.description) : item.description != null) + return false; + if (id != null ? !id.equals(item.id) : item.id != null) + return false; + if (!title.equals(item.title)) + return false; + if (unitCost != null ? !unitCost.equals(item.unitCost) : item.unitCost != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + title.hashCode(); + result = 31 * result + (description != null ? description.hashCode() : 0); + result = 31 * result + (unitCost != null ? unitCost.hashCode() : 0); + return result; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("Item{"); + sb.append("id=").append(id); + sb.append(", title='").append(title).append('\''); + sb.append(", description='").append(description).append('\''); + sb.append(", unitCost=").append(unitCost); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/qa/persistence/Musician.java b/src/main/java/com/qa/persistence/Musician.java new file mode 100644 index 0000000..f8bd9b5 --- /dev/null +++ b/src/main/java/com/qa/persistence/Musician.java @@ -0,0 +1,150 @@ +package com.qa.persistence; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +@Entity +public class Musician { + + // ====================================== + // = Attributes = + // ====================================== + + @Id + @GeneratedValue + private Long id; + + @Column(name = "first_name", length = 50) + protected String firstName; + + @Column(name = "last_name", length = 50) + protected String lastName; + + @Column(length = 5000) + protected String bio; + + @Column(name = "date_of_birth") + @Temporal(TemporalType.DATE) + protected Date dateOfBirth; + + @Column(name = "Dead_or_Alive", length = 50) + protected String deadOrAlive; + + @Transient + protected Integer age; + + @Column(name = "preferred_instrument") + private String preferredInstrument; + + // ====================================== + // = Constructors = + // ====================================== + + public Musician() { + } + + public Musician(String firstName, String lastName, String bio, Date dateOfBirth, String deadOrAlive, Integer age, + String preferredInstrument) { + this.firstName = firstName; + this.lastName = lastName; + this.bio = bio; + this.dateOfBirth = dateOfBirth; + this.deadOrAlive = deadOrAlive; + this.age = age; + this.preferredInstrument = preferredInstrument; + } + + public Musician(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + // ====================================== + // = Getters & Setters = + // ====================================== + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getBio() { + return bio; + } + + public void setBio(String bio) { + this.bio = bio; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getDeadOrAlive() { + return deadOrAlive; + } + + public void setDeadOrAlive(String deadOrAlive) { + this.deadOrAlive = deadOrAlive; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public String getPreferredInstrument() { + return preferredInstrument; + } + + public void setPreferredInstrument(String preferredInstrument) { + this.preferredInstrument = preferredInstrument; + } + + // ====================================== + // = hashcode, equals & toString = + // ====================================== + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("Musician{"); + sb.append("id=").append(id); + sb.append(", firstName='").append(firstName).append('\''); + sb.append(", lastName='").append(lastName).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/qa/persistence/demo01/CDService.java b/src/main/java/com/qa/persistence/demo01/CDService.java new file mode 100644 index 0000000..ee9efa3 --- /dev/null +++ b/src/main/java/com/qa/persistence/demo01/CDService.java @@ -0,0 +1,41 @@ +package com.qa.persistence.demo01; + +import javax.persistence.EntityManager; + +import com.qa.persistence.CD; + +public class CDService { + + // ====================================== + // = Attributes = + // ====================================== + + private EntityManager em; + + // ====================================== + // = Constructors = + // ====================================== + + public CDService(EntityManager em) { + this.em = em; + } + + // ====================================== + // = Public Methods = + // ====================================== + + public CD createCD(CD cd) { + em.persist(cd); + return cd; + } + + public void removeCD(Long id) { + CD cd = em.find(CD.class, id); + if (cd != null) + em.remove(cd); + } + + public CD findCD(Long id) { + return em.find(CD.class, id); + } +} \ No newline at end of file diff --git a/src/main/java/com/qa/persistence/demo01/Main.java b/src/main/java/com/qa/persistence/demo01/Main.java new file mode 100644 index 0000000..afa496e --- /dev/null +++ b/src/main/java/com/qa/persistence/demo01/Main.java @@ -0,0 +1,61 @@ +package com.qa.persistence.demo01; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +import com.qa.persistence.CD; +import com.qa.persistence.Musician; + +public class Main { + + public static void main(String[] args) { + + System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n"); + + EntityManagerFactory emf = Persistence.createEntityManagerFactory("module04-persistence-unit"); + EntityManager em = emf.createEntityManager(); + EntityTransaction tx = em.getTransaction(); + + CDService service = new CDService(em); + + // Creates and persists a CD + tx.begin(); + Set beatles = new HashSet<>(); + beatles.add(new Musician("John", "Lennon")); //Dead - Assassinated! + beatles.add(new Musician("Paul", "McCartney")); //Alive + beatles.add(new Musician("Ringo", "Starr")); //Alive + beatles.add(new Musician("Georges", "Harrison")); //Dead + CD sergentPepper = new CD("Sergent Pepper"); + sergentPepper.setMusicians(beatles); + sergentPepper = service.createCD(sergentPepper); + tx.commit(); + + System.out.println("CD Persisted : " + sergentPepper); + + // Finds the cd + sergentPepper = service.findCD(sergentPepper.getId()); + + System.out.println("CD Found : " + sergentPepper); + System.out.println(" Musicians : " + sergentPepper.getMusicians()); + + // Removes the cd + tx.begin(); + service.removeCD(sergentPepper.getId()); + tx.commit(); + + System.out.println("CD Removed"); + + // Finds the cd + sergentPepper = service.findCD(sergentPepper.getId()); + + System.out.println("CD Not Found : " + sergentPepper); + + em.close(); + emf.close(); + } +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..474ce35 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,25 @@ + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + com.qa.persistence.CD + com.qa.persistence.Musician + com.qa.persistence.Item + + + + + + + + + + + + + diff --git a/target/classes/META-INF/persistence.xml b/target/classes/META-INF/persistence.xml new file mode 100644 index 0000000..474ce35 --- /dev/null +++ b/target/classes/META-INF/persistence.xml @@ -0,0 +1,25 @@ + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + com.qa.persistence.CD + com.qa.persistence.Musician + com.qa.persistence.Item + + + + + + + + + + + + + diff --git a/target/classes/bookstore/Author.class b/target/classes/bookstore/Author.class new file mode 100644 index 0000000000000000000000000000000000000000..6a924f43e89599f805fde3650059f0704797a54a GIT binary patch literal 1254 zcmZ`%TW=CU7(K&PmQ^UWlv1y#Etgu7@>tWPX{;e3HIatIC$qo^QagNiRyaF5<4f&(h_-XZELaqQwgWgdlNcz}l# z5kMqK|7rR}K(igubm+^dE3Ii3;Cd$zT#7(6s2Mgzpo~bg7g}d~4)7hduapSYX>)*D z?C?`Oiy5x04)4Vd?_ob0J|QZtG84G7s=Y}k)Cv&FVb|P{Ok@Z{Jyu9{RmfqikVd?a cr4tHGJR%{T{|E`MLjujfw^neSv~vf*Uv3!KMF0Q* literal 0 HcmV?d00001 diff --git a/target/classes/bookstore/Book.class b/target/classes/bookstore/Book.class new file mode 100644 index 0000000000000000000000000000000000000000..aaa6310e6a3291982bd342e62f42efee17f935c7 GIT binary patch literal 1780 zcmZ`)T~8BH5IwiFg_ae{r?w(rqPFE@6;Lz~45AQ1qlu8dZ`*5GYyn7~-Ybw9S0>q+w!S;L46WG=1G zmf5hJy7{hhDXU5#X4lAHx(bwBr@kwYecyJJ-IQg!Wmg*Vz;RqUsmTwn*R-hL z3T2{p=+eM<(WFe)%!vK{%h-K;@3&d@aI#|LOd8cq6S**|#*rrYywSouqW-I8BE$$}f`l9`R|kzFlYUNRc&&S{DBtz z$+^K~Q=7bo^)Pv#u40x+U&KM~TO`f4Utu;t^+ZaBA_;70iOdZW+0ha)^+e_diR==Q zy&H%G8z=A>Pc(|m4-$E)C9+9>1A&~^6qz3+a!5p8-#{c-Zb6FaMzc6bF+B4(X~+MDd6%98{{cZs8D;=`a9yfVWhnsU0>g2&{>1wzV>wBM0&U3G~1d^rB`kcMw?DcD@+U|-iiV@ zPJP0Fvf?+}EsxPzFAglnATN_czNx*v==BICxS~)9+d+EY(yeVBP>_K%cYVL99dA** z%L+N&a@?ju@tqTfAN+u7ME z7AA01?y43hlRMi&1*6nrPec(1YEL^Lteq6+giVe$G-9Iberj{7e+w=ZG+CKK-c^SXpRslB^#{09HN@8IVH^_@ZOKamnBQnvt2$jL? zT_GiXk!e=b37~(v9p&w#-aL%b&_9*8{C2RT*Ia4*;okeYB&-xnv%AWN6n$F63^kOg z%OfK~@>Gx+_6Hem{PXaK_zW{uu zXI^{-z`oGIjD4|#S$m;_IeRMG!Mr_{>!8-hJ{=2nj@WaQ={)tAXQ@@9)rfA#`IZvQ zG#}AZDPgI`={YD|z(xLrVV$eunzO%R;dgG55~X9ng0Z|heli5l z3@`U04~XkP~>V7 zWqw$c^#LNe9+6+oqRbByc|anY2M|dfpTciOBDG;6kBvl@%|r$sN-`$TNThK9k>s6c Qa5wJ3O8l^7uI~Z=1IKet@c;k- literal 0 HcmV?d00001 diff --git a/target/classes/bookstore/OrderLines.class b/target/classes/bookstore/OrderLines.class new file mode 100644 index 0000000000000000000000000000000000000000..3988412e30ff9389ff4b747bf500bee9676ae31e GIT binary patch literal 1209 zcmZ`%U2hUW6g|Ud`LH0ZXj@8a)e2Ng(mvKS(MAmkvGF4$KA8n3bSup2?qc*m`Jjo7 zi4Xn&f0Xgu-Az$gA9iN$+78ju{;(ti6~T-=656?b-dYerSy2TfXfWPoWx= ze{8?gu4j9`HUr)64B503lX$9)b}e5Id)9cWS(Fia9Zp@3sXlSW(}`hK%2*Svkd@*$ z!Z9<}X5^nGDfB>L>HX9qKmU`0>M;4hHnxAPkZd%2Y(8;@I*%l(MO3h&P!bQGO(%Wr zzOpDsq0)5**0^W6w#3n8%0IIMeQ^$w)M{his7|w&gTiJJd1U0YRYVzA71AT^i^xi& zIo~5?w~9z3qmX0SqsWh(H#@H^OcGrMRzJTKPOX$)VAt#})gU8<{7Yx*4)haSq?Tr{ zU|;@oyz`F(JCAUa?8M|G5<-ztmQkM3689XxlxU6a%iIgh6+K+Rat9@5sedtB4zpQi z_(!;|66uh;;+}4O$F;9KBygRp3G1faEdfm*9} zf%*)pLJ*+Fb(7rdSjJWWxgEAekOYV{$w~MpIAA;QLdLWig*?Au=L;`Fo?-&96U*^- zY;$eCc{jHC4t5DGlaDz{%*X`dX1YR)TKq$M0YWvby3~`2^eEg#Bf|PyMg8-fiv3t3 iO|%w>Z2V(zNaTP-4*x?Wd=3c`72oa!&q literal 0 HcmV?d00001 diff --git a/target/classes/bookstore/Orders.class b/target/classes/bookstore/Orders.class new file mode 100644 index 0000000000000000000000000000000000000000..e0b0bfe254385962441f5d21c42aff46950107e5 GIT binary patch literal 2133 zcmaJ?ZEw?N6g_sEgr+Hd0kX9lqXkNv6z~QEwxuhy0ZO%uqNR#7?Zf28k5aS5Mz%Ap z{|cm4NJHWW>_<&I_pzJ0uFHqme(uY;=bn3?_TT^h`3T@XUX)-OnA!LJKf=fll(ic; zDhNv$r}ee{r)~9ZuV?MOdYQCqJK$GO6(W(mo^sHUC)g+$Y-_IA!gHeR2gGftl&#rE#bO>Sv@u_-U~ZCpnzp8 zVQ~TmmMbV@QUs>ZFNcGD73|p@q_pFA?S97&TsbGk@#w(St!5Ms+0F9mSpiZOy)dxwU$khuzM90B&^J^&11bUpNbtRUJg?+S8_OsN>c=C zrgWZSQu=%;otH3=v-CAdwsQ8EL255+S=%SJQL3i#=8~!-IH6k47|+F%;Ogn2aZ!`O ziE?eZ=R1xF+N@wf3rYrwnd-LvVbE32T^avm{P*Cltd4=aHGam6A00NhN!&f|ZULrD ziKh}zWu7kZJ;9$TJH}^4e@|)u4C5~HH~kw7g&EA!&!tGR#e12SD%%Q4j3){FJ$oQYe!hC-#)^f6XYrt0+tixTkLTK^Td=2i!n-4fq01? z@+G~StY_itq^iZYbWy1Pjc?xa!-P;55rDN6<-&;aeSDjfyp~P2a+4q6VUoPTQl^yB z4W9HS6PN!i1(uP1s&Uk)pJLLFfk(Mr+{qGoluP70e4j@oC2~xpK_ctt5Q$gGzz=AU zWW1K^dO6av-pmquoJ;6Oh$1n_V-50(=aE8sug3InVq#4adwLErxhDpmP`!BHio7{f rv>4dT)od$EaXXjd(|pagvcvm{)LQ3Ii!YdoXC!ChxxU1*ZQH>Agu;l= literal 0 HcmV?d00001 diff --git a/target/classes/bookstore/Store.class b/target/classes/bookstore/Store.class new file mode 100644 index 0000000000000000000000000000000000000000..fed3189fe9ccb8d10af15871458418c4c8cbdaaf GIT binary patch literal 961 zcmZuvYikoh6g`t?yNPWQ)7ZpE?UST}3-)8BAjL``C>Y82O){iYH?y)k5&c&Rir@!- zfImt+Gg;CY!?JVt&YXMhxo7tGpP#<~oZ+O1jKKCViryzCilyJTYY{nt%1!Vw@WVh) z{5QiJIWhtnHRgWr_MjK($+?QiVJKf{9htzWNGAdf2mj=Mka40CBlSr7 z-7$*})*QT&TE>Bq<3SM4BtaWtG;&M=wWYp&6D!xbwT9#}3TIQz;+zhqQlJn@Ju%l= z4*ZPSbETEJ5XiPW17a?tvGkBdy^IQ~^rEM3)T= z%(FWQH@CXjW(|J}RJqoOJ!2G%`O_b``;{LV>~OVoK%G<#J|Kky;U0FGS%M~4OK?S` z#d?jXV^ xzF0xa#jVxi{k6phi)k*>X$mWo%>6i~c_&L#6c$qy(kU`HbaIc}rC7noz+c*?t$qLi literal 0 HcmV?d00001 diff --git a/target/classes/bookstore/other/Main.class b/target/classes/bookstore/other/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..c829ccda01729fa5efc159b68585a0c9883216f3 GIT binary patch literal 3690 zcma)8S$G>)75=Yddq(4FnohQ=Z4#x;VkLHzG=WmdF>y@XEOzY1!9gi4jHR(Wv7|9G zBPUK+!xl;lrEFzu+4rplPb1x*6$MjdCu^BvbpIsUlirUp#Ate{z7%{g<*Ocl*?AvHL9&dT`$tzCB6 z_PYgEwI@dentPqRrC}9fI$F>waAUt+woX<`qn3Nx94%S`M!%CYizB9M%kSD^vp;To z0vr05vYnyc5;1VU{l5MM48y)_mkXKXNDMb&tpcL~;qbKQTO}Rqu%76g3c;=q58F;^ zh$nrXx6D#T!A60N*Q-5Tv5R@jRS_p-P3!LNP8_*lEP#9Xl9ib8^xu=LI^KvbE@J4SYsL zyFg2#tE)?s+K75LIu&#XtPL5eifgHtT4*eeh(Ir&P_+IygL(sDhUAuZ>u z&I)s`;Z7V-uwP)4)O8^h5l9U!2g z&~*HSikGvnPC4g`Y#$9nI3ppyLIz?{@n#mUBu7-7rGlO^m6oSfypkV>D{jH^JOvLh zzzc>Clf6{DT0lQ)y6$vh$nkyI$D=$lW|n=^<9T*cY|>=Kj+(g%4fkVA;wcE6_`mQ( zXe#t`8O%1hqbJc@baE5t9d{xz$QmeEDkew@Ue1=ilo+#vnov+`px!~3>?6t3lkglJ zlXwmDz(P7k@J0h+^gE_OhqF-@ zt%;EX-!1P2PwG2V;5|~@lXFTc-a`hSBpWj^c@3BGUKzXh2|N&uUG0ilT#=ELx}nI@ zvd3g0e}JXwTb`d_z+D!wjNoHBJ|wwUV+4EZ%a`HEy^ren7#8N6c0c7(8MuN6tP1T!dzCIG+8dMLHqxhG%trFJR4F(eW&KKRwIZHr)b8oV80#Fl;`n#0m}* zx&nRIE=&$YO%~~5YY^cTdQ-utky9z|?iBf@FAfx@x)VDGlvaXRdI*0laDHrRqQfSSFx{u_bl!b80eVAL4lKV=*@P_;7Gc;a~4Mh<}i?*!C<;& z4ntYvlyQ0nBk9)QBWv6zKa@G#pEX`(nDJI4Hv=oJ1`FfHxwsN8#Ns?%%*NF!%FQ!y zXHjXwnc8BkVQ~(ZXzq1sEw05|s(AezE@zFm7;kI7iYvyuj7MhhXu2(~8Sk&+gA{42 z;=@&ZB;Fj?s(2!;5%Z@6>TZ9QZp)3&hwg@(q3oBc_;OmS3x2&(u)h3MZTXu~6^zNe zimUVXj5)@0em$c4JB_Ltw~zR&s(ttn@EV8(ZRR@#v6g@9cVj;9CNc}=6Empp47A{=ixM}SQ>;i}VBRpwZNIEYm>c7$%9j7iF zS1$Zbj^lkvgeZ<(5Z=4*+;h)8_kRER`3r!@uykk)<&o!|`++Bg-Ih!Z&$l3~A*z=tuv+guIhu#MX~ZZTA^alpVG+-1;X zix^6g4M{hD)E2hdLSi%5ldG zPm;-pQ||lSa4vreS`8_xeFG0wHdB zPd5#l^xX(EiDu)(7O+OfEvzORnry60r(dF9 zpUD#a+;1&FLzpoV>N9JM=CFjS4N?3*jt60^`_wz zHB3C}*pAgO*R8g-SvRlQHhsjrtzlBxzYYd%);kTGj)S(*Fg1*-7|(0nAn`5JZgC^y z3%2UCEPIPiLyb<`s#=DqA9f8oj#V$Ln!+-)YHitu(-HTD;OxVc)U27q7{G*% zF^nhi0W+!+s*Z5mXm9fv!HZb&QDb#{cs1skrs? zu7v>OoQ`>kGg33#)t0p*6(;Nj9T$<%km@kirDofa#gBBvWs#-i+^I2P*;!wpN|U7| zW}oQz6rX8`S+q%qE$H5M-H-auro81kQxsow6Lu`1-!0Y@{XL6O8kc+IEPL(+7Dj0C z*gJ!UqXET(UK^oP&*qpP%QX?Mv~UIcHZ35*C859NHkx31k2+Tmnu5i2)Qh3T_o<4{c(4!HdR{N2oThsTNqohY=nXA*^?Jvu*UVN5t8C3u z`R8Fg#AE5nb16LGl2yAROHXxtgAKN^v9n{^ERlJC!Vjv`S2h9lqDXuz65oY9S2kam zRj24L$)INn-*cADO{sRgG9yBpB2?9IGFy6=ADfqcYJj?aTRK*-#1e0Ba#Z(a)iAu; z?6j)pO-lwqvQ%D>q(x8g8=UvfZV?}{g$DQ+Gk}=18{d+A8{uz?pP@E}xxwMU#h8pT zejirPX=RwE(Gh+!8_-M~#W8+3r7+I#jCz_!g= znMr90G2?~UW(dj1WK@XU+#a&MIOEJ2aNdh^fpKOqfvk!(<*IaJO?t7YtP&biQFC6@ z-)NnnR=!`2}j6wY!aNInd5D-z^tG)O+2k$VKG^Z}8JldJd=*CH~q5C&O^1i6lq=N!n$ zLKtL~AZvXYB#rC0RSKnK`X$$h9vFxg~??7|Z1C^4zx8 zo)1?q%V3MTyF#+bsp%F%evZSAQVvgb>LiyKP1jVaM%t_!$%@h5N9<|c!UxDr`nk!~ zW}YaZO`D*Xi1kL=hTA;tB(9f6P0UEEF9ngVBKmesGntPzE_XJ!^t?Mi{YXIA?M3%h z%(}s33G`)ME&ueER`JryPG=5Enp09WVS!fYq^dhLll2u`#9Uj2$~Ja3Wg(hvtQ1#j zhFQ?7EJQqO*Q$B_njx#%vqFa_C0L+a$1St<-Dk8K_jc^)bgQIS4Oe5=6A^P<+1|DCUVB!N1_NtLS2D{Rcb8W;(wU`fHh~$W64;Le35;VRf#Y&`7n2E?U{?0-(p*tk z34DmlQP@#b61axz1n-gnHlhsqOX=)9o82fZCa{gF99XfQ*$MAZF4E~XnB9TdiI&r~ zILXsCJF#=PXnF(ZcxyDBsZy$*O`Dp-J=;6U6EgZ1o1N12H@A`Jg3g-)ue(@vty0k~ z9-|Yjt*17aZ#`I@Rd2)l{q{Ee!Kw7_Y8>G;JjTl>#2@PgfrDJd5x^nNhdm8T=*xRK zAK`O!1;=Q>vi@K34izkQhhoaXG!hiDGdRw2<2lZPb9m-8#7}$)-~`8rCrscZ-=zTo zgr4Foa2oG%Y&U*|z>ie68Xxa!dLhZWL@w+? zMD>8cJQliSB-}}4p(~L^TOZdYO8I z{+T)=DL&sL9DJGj1JPSEuMm2J5joBBsU!9+23{a87jGnrnt%cXC=1ll(*RJe06}Vk zo~c@gl|h)|a2@f60p$dQUXoSN>-LNMY5`Ul*A1S;n;1m~`*545?=BO1k9k?;XHga# zSVI}>u#v;pxQ}n}(96Swim=h5&zYYqjQH&5mLpIv(OpU}aT?vV4$QhuNGw41gKhTVI zlu?2obi<5h0#Dd{8l&87spqO6$1tn-5wjvZ_9qY-x-9<1Q3S}Jy!p-p@4W|v$h9wN z#H-v7>pP}LhV|e#^gm1vyyjkIm^GaM literal 0 HcmV?d00001 diff --git a/target/classes/com/qa/persistence/Musician.class b/target/classes/com/qa/persistence/Musician.class new file mode 100644 index 0000000000000000000000000000000000000000..22f9dbef087d6bac545b75200371f197a3721d42 GIT binary patch literal 3605 zcma)-ZC4vr5Xa|+5JFfALQ72_6sr~pp|M4zEd|R{E0sc}7;M$XO>zl~$!@yYpw*-H z_(FZBRzHZIW9T{R@dNmwJpN~QlWfu(PG2PV-nnyUelz#Z?7#p0`416IlhZ>XL8o(8 zDfLiKm8D%VDvmUBGIhIJF>;1(_E1>R;J$vKr;55+NNr~KWzG>4GV+kGH#gQTvoI$p zzEw3Hqa@Qt#mE-rqG?)=?iiL?5j5hef8OF}EssOz6dO0CDQ(@6`LtfFN+|X28g|9m z&`VO#P{8qB$2MHorxaF}tzxxg;&j+_55`<08E+9OO0(eXbs-g(1VxK_-Fz=keWk9f zVL@Z~2SI&#@NDib8Md?62)^nV#ncKm;G~}wGS+S;>#3Yk5N*p+*|PN_)VmKjG(n?B zsBJ$gv*qy0;`S;NNIk!4FBXjhoa$bsbUl?}w3_Odo>qoplpgkTBMC9N0^GlldbL5$Nrk+)r zNcWPU3mV0!k7sXa^ny3Lq|vZ9dsCwmG{U=YX>`VuUDoI&dYNTcHF|~m1dTmcAe_bs}iWS7Kv* zFt*+(kUku0t|Hi5GAuz6h~3FCNVp~%#nK3*c^!g|LA^z*9!FD&UAxAD@7_HZ6fnRd zzx@*}G1l+Y19KHdg5lNo*~th@+)AZPs=0#BjE#~ho;vk9c2<)qiG z=Yo%@^<#rJMcf%@r^k(C&X43CEb#RYv_{f|9ReoNb^I>^b_uY{F4(AdtN}LA02}bZ z1VWkj-J~#j8UKS8euKdfamM-Hh;AvfeH{+HY%f5YWl>1pjW=%0p$A*AYL;U{0a1fdV;RQMSklq+POD$?g0 leu5_a3*z`Sz<0}UFER8)i^|{%(L)f0$acS++|nvU{{u~wkS72D literal 0 HcmV?d00001 diff --git a/target/classes/com/qa/persistence/demo01/CDService.class b/target/classes/com/qa/persistence/demo01/CDService.class new file mode 100644 index 0000000000000000000000000000000000000000..73cddc20cb87d2143f957301105f820633cccb46 GIT binary patch literal 1148 zcmah|O>+`K6zo}$C1gVa5#vV`5Mua<*;pPtV0l@R6VXFbxev>T8)1pdCKdmcR%u!B zV0rT3Z?Y_Vb`dcjmCMY&H}Cc9?wS4h`|CFVPqCFj8l^dyD9_^|DkiFWU(?GY6YC~w z0)`q2lskv=M4sA5Dj0j?Q2DO1xBbuy-|tFa_EpdlNImy_FMJ_TtzBDPKM+Vdqn;92 z?0CL8D+y%wM#q7xc06rYcB*?*Uy_A+)Gf>*W1?Z9 zi4B3mC8jxT3y-mB!PXU(ODfLWN=bS^tmswuP`RN%qNW8GuX!E<=H%&+%&gEDCNeFl zoe+37d+ZG4c-)#X@^Agc6s?S}1!X?yG#@zcLEFHuB){ijaa~}v!@R*g)A$0>XnuzA zk&%Hc*DMlTm)UWXy#*{Xx)oPr2{}gWi%Sc6#t$s$SxCEUgxPRa39&oywDeQAhaD4Mv(lU4GJb#1d(dzCxS;-9z_OM&$n RVY%t3++>u%1J)QQ{sFx3@s0oh literal 0 HcmV?d00001 diff --git a/target/classes/com/qa/persistence/demo01/Main.class b/target/classes/com/qa/persistence/demo01/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..cb63e77588285b8e5121cd31b71eef44319f289d GIT binary patch literal 2975 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�}Q%5vq81 z9p%M61 z9`FHGs5S?{Q!HrWjK*`o5KL~HVLBESmwM~Ob;|>5cSv79T1t&?gR+kGA^yF7G+JaS z12uZkWtaZDg2MrX*8!)jRT=#=?azmvAJ zSgGQ%_*GaXG8sx53>exg;-IqSwtM=f{KY5I2V}YkjJi`I{!=3OIH5$saMH7?YIcdx zNL|hy!-zD<(ht2MX7USb4`EULojy&^{b$t{LnmZ;G#+~O;<_r*W_o4x%5Hoi)jByX zeVp5sWhfD#^cv>HCxB8}UC#0Pdsz;}J#)lb(1D0qhVKjWPAQ37NZVx48ySSU7b1L1 zn7*h_ygS|!D{Cb%%sS`pJw2zmQ_9M{mx!lDA~*+z)bap4uWwzh9NHS!(}&^<3b2vy zVU}C%kAEzpf7bTU|GJ2*ja*D@e$=A=8BF!h;Kx!Llf4nsUzXp0$*2FH@~v%+ovln* zIDP;jK#(Z%OJja~YcTUD8uoA@AlUwYKz5Ive7q?}G<9qjxp2J3D#pWGrK{tt_Mx=I zn{q{ha*-=b=jjr zj(Q6Cf;e0R$^*(L&+P;enNPr?iG9&tg`4Ozrfb*6%CxlS#jo&#lrr4BF)N~VbPY2o zP8J1=UPy~30k9f?;dB9?o!5w;7x~G10ub}Lb>rAhE|qP#0uan5BO=xzpAh6g z8=;1&tE|{9^3YNrAEOFFb@~EjsW?c!C_y$9yn|+k5OXbS&^*(VyvB*z+1Ppw?2`ma4zGAV=Y6hfklSU6lr30lGiV!1ymGG=iFM#HXW=1idCa@C8zXz$-*EGns4dSZ|Vwkw+yv4MOVNMfZ9_7Kx#Y`0+g9lsZ6;0QG59TWnD>USM_bw{~ zCDdKrMJ6(K)uM_0gu2&Zx-LTFJRA)ICqffEwL%CG}V7XnBnO z!o8Ij(>@mAO@;OsYjWl3(`vkiJ7vf(OICc4h-iuCCT49mi)X5tzQLDF=tZ|`r@iBV zJ`PZIPGRE0#Jvk=i50m;1n*(o=Ku)9@{e(`>&kRjw@4EO*6Tyfo7h*tgf^P5ik=?B zjl~wM1Q)_hUadG-K5>s^Ago?_J!>V-t23EP2M@2v8z-O$m*uWup9ZVk8H*|(mL zDel$-Y<#!co)kH=AVFF>p8Q!qzfEytYurwMGTgqaGw&hl`VhiJAI9%=MB8OhT~Qg* zzN_@Lr?lnt6JNK>HC_KP@K%0tM=u1cy7ktoWb;~wr+)cm?)^+k-dm}$%T*Hdc5RfD z>M>-{MfPc9%-VY-dS!d&p}AXR%6^}fvQ3^Lx6Oc#*Xr9|d4Xjs1AE>1s(~?a@z*91 z9Pu-~hFk5P#NNg@H+UXm{R&h_xl}DHAQJPnI@y~L*MadtVD}<-KY~en?hRIMTchD8 zX{U^*^b^Fb3sDU7Bw9l0Zc#vWiN(F4yP7x5?KmehG95c_^rJ-DG2v_sz+?Q+{qQ#w z(wq{{7AM?qBV<1ze4FuI5mA+lZL}r}@M2_LJu5S&;f{E@rX+CD`~N3NI|tiGCU*jx zIN}a`K=NZjff#qEc)&Q(*QUjWsfa^uxrNqBjp($}EA6~rIn*;?m&V(siy<>exrq)R z*X5i@XRjsYU38zjLynk|EpsOAq-@HIg*Rj9lo@JU*}xclDP%SKV6EnW0W+JDL9$no zgmqo78D$5hC<6(F1O4yrlgE)fHVlYE(eJ-MM9&2KeDK`4i{YPLn^8a(z61jq|7PEB_0me&4``1gI?pNNo;TId&uKX-Zm4)ynKjGs_?k6x%>K>g>Y z#$VxnrR{&hB@zB*_5NiNzl)lmDF4)J-^JbU4FlrgVd>FI^y41*Q|kS>9R8X7UF`i# zMkM)1^5X#iDgFK(@4NW>i6`|x;r&Gl{t5hRG59BRu21a$5BLvh_;VH!ezU**okxG- k*Hiv46Y-I4s-g_+