packageentity;importjava.util.ArrayList;importjava.util.Collection;importjavax.persistence.Embedded;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;importjavax.persistence.OneToMany;@EntitypublicclassCompany{@Id@GeneratedValueintid;privateStringname;@EmbeddedprivateAddressaddress;@OneToMany(mappedBy="job")privateCollection<Person>employees;publicCompany(){}publicCompany(finalStringname,finalAddressaddress,finalCollection<Person>employees){setName(name);setAddress(address);setEmployees(employees);}publicAddressgetAddress(){returnaddress;}publicvoidsetAddress(finalAddressaddress){this.address=address;}publicCollection<Person>getEmployees(){if(employees==null){employees=newArrayList<Person>();}returnemployees;}publicvoidsetEmployees(finalCollection<Person>newStaff){// fire everybodyfinalCollection<Person>clone=newArrayList<Person>(employees);for(Personp:clone){fire(p);}for(Personp:newStaff){hire(p);}}publicintgetId(){returnid;}publicvoidsetId(finalintid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(finalStringname){this.name=name;}publicvoidhire(finalPersonp){getEmployees().add(p);p.setJob(this);}publicvoidfire(finalPersonp){getEmployees().remove(p);p.setJob(null);}}
packageentity;importstaticorg.junit.Assert.assertEquals;importjava.util.List;importjavax.persistence.EntityManager;importorg.junit.Test;publicclassCompanyTestextendsTestBase{privateCompanyfindCompanyNamed(finalEntityManagerem,Stringname){return(Company)em.createQuery("select c from Company c where c.name=?1").setParameter(1,name).getSingleResult();}@TestpublicvoidcreateCompany(){finalCompanyc1=newCompany();c1.setName("The Company");c1.setAddress(newAddress("D Rd.","","Paris","TX","77382"));em.getTransaction().begin();em.persist(c1);em.getTransaction().commit();finalCompanyfoundCompany=findCompanyNamed(em,"The Company");assertEquals("D Rd.",foundCompany.getAddress().getStreetAddress1());// Note, we do not need an assert. Why? the method getSingleResult()// will throw an exception if there is not exactly one// object found. We'll research that in the second JPA tutorial.}privateCompanycreateCompanyWithTwoEmployees(){finalCompanyc1=newCompany();c1.setName("The Company");c1.setAddress(newAddress("D Rd.","","Paris","TX","77382"));finalList<Person>people=PersonTest.generatePersonObjects();for(Personp:people){c1.hire(p);}em.getTransaction().begin();for(Personp:people){em.persist(p);}em.persist(c1);em.getTransaction().commit();returnc1;}@SuppressWarnings("unchecked")@TestpublicvoidcreateCompanyAndHirePeople(){createCompanyWithTwoEmployees();finalList<Person>list=em.createQuery("select p from Person p").getResultList();assertEquals(2,list.size());finalCompanyfoundCompany=(Company)em.createQuery("select c from Company c where c.name=?1").setParameter(1,"The Company").getSingleResult();assertEquals(2,foundCompany.getEmployees().size());}@TestpublicvoidhireAndFire(){finalCompanyc1=createCompanyWithTwoEmployees();finalList<Person>people=PersonTest.generatePersonObjects();em.getTransaction().begin();for(Personp:people){c1.fire(p);}em.persist(c1);em.getTransaction().commit();finalCompanyfoundCompany=findCompanyNamed(em,"The Company");assertEquals(0,foundCompany.getEmployees().size());}}
PersonTest.java
packageentity;importstaticorg.junit.Assert.assertEquals;importstaticorg.junit.Assert.assertTrue;importjava.util.ArrayList;importjava.util.List;importorg.junit.Test;publicclassPersonTestextendsTestBase{publicstaticList<Person>generatePersonObjects(){finalList<Person>people=newArrayList<Person>();finalAddressa1=newAddress("A Rd.","","Dallas","TX","75001");finalPersonp1=newPerson("Brett",'L',"Schuchert",a1);finalAddressa2=newAddress("B Rd.","S2","OkC","OK","73116");finalPersonp2=newPerson("FirstName",'K',"LastName",a2);people.add(p1);people.add(p2);returnpeople;}@SuppressWarnings("unchecked")@TestpublicvoidinsertAndRetrieve(){finalList<Person>people=generatePersonObjects();em.getTransaction().begin();for(Personp:people){em.persist(p);}em.getTransaction().commit();finalList<Person>list=em.createQuery("select p from Person p").getResultList();assertEquals(2,list.size());for(Personcurrent:list){finalStringfirstName=current.getFirstName();finalStringstreetAddress1=current.getAddress().getStreetAddress1();assertTrue(firstName.equals("Brett")||firstName.equals("FirstName"));assertTrue(streetAddress1.equals("A Rd.")||streetAddress1.equals("B Rd."));}}}
Comments