JPA+Tutorial+1+-+Entire+Source+Base

code format="java5" package entity;
 * Address.java**

import javax.persistence.Embeddable;

@Embeddable public class Address { private String streetAddress1; private String streetAddress2; private String city; private String state; private String zip;

public Address { }

public Address(final String sa1, final String sa2, final String city,           final String state, final String zip) { setStreetAddress1(sa1); setStreetAddress2(sa2); setCity(city); setState(state); setZip(zip); }

public final String getCity { return city; }

public final void setCity(final String city) { this.city = city; }

public final String getState { return state; }

public final void setState(final String state) { this.state = state; }

public final String getStreetAddress1 { return streetAddress1; }

public final void setStreetAddress1(final String streetAddress1) { this.streetAddress1 = streetAddress1; }

public final String getStreetAddress2 { return streetAddress2; }

public final void setStreetAddress2(final String streetAddress2) { this.streetAddress2 = streetAddress2; }

public final String getZip { return zip; }

public final void setZip(final String zip) { this.zip = zip; } } code

code format="java5" package entity;
 * Person.java**

import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne;

@Entity public class Person { @Id @GeneratedValue int id; private String firstName; private char middleInitial; private String lastName; @ManyToOne(optional = true) private Company job;

@Embedded private Address address;

public Person { }

public Person(final String fn, final char mi, final String ln,           final Address address) { setFirstName(fn); setMiddleInitial(mi); setLastName(ln); setAddress(address); }

public String getFirstName { return firstName; }

public void setFirstName(final String firstName) { this.firstName = firstName; }

public int getId { return id; }

public void setId(final int id) { this.id = id; }

public String getLastName { return lastName; }

public void setLastName(final String lastName) { this.lastName = lastName; }

public char getMiddleInitial { return middleInitial; }

public void setMiddleInitial(final char middleInitial) { this.middleInitial = middleInitial; }

public final Address getAddress { return address; }

public final void setAddress(final Address address) { this.address = address; }

public Company getJob { return job; }

public void setJob(Company job) { this.job = job; }

public boolean equals(final Object rhs) { if (rhs instanceof Person) { final Person other = (Person) rhs; return other.getLastName.equals(getLastName) && other.getFirstName.equals(getFirstName) && other.getMiddleInitial == getMiddleInitial; }

return false; }

public int hashCode { return getLastName.hashCode * getFirstName.hashCode * getMiddleInitial; } } code

code format="java5" package entity;
 * Company.java**

import java.util.ArrayList; import java.util.Collection;

import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany;

@Entity public class Company { @Id @GeneratedValue int id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "job") private Collection employees;

public Company { }

public Company(final String name, final Address address,           final Collection employees) { setName(name); setAddress(address); setEmployees(employees); }

public Address getAddress { return address; }

public void setAddress(final Address address) { this.address = address; }

public Collection getEmployees { if (employees == null) { employees = new ArrayList; }       return employees; }

public void setEmployees(final Collection newStaff) { // fire everybody final Collection clone = new ArrayList(employees);

for (Person p : clone) { fire(p); }

for (Person p : newStaff) { hire(p); }   }

public int getId { return id; }

public void setId(final int id) { this.id = id; }

public String getName { return name; }

public void setName(final String name) { this.name = name; }

public void hire(final Person p) { getEmployees.add(p); p.setJob(this); }

public void fire(final Person p) { getEmployees.remove(p); p.setJob(null); } } code

code format="java5" package entity;
 * TestBase.java**

import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence;

import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before;

public class TestBase { protected EntityManagerFactory emf; protected EntityManager em;

public TestBase { super; }

@Before public void initEmfAndEm { BasicConfigurator.configure; Logger.getLogger("org").setLevel(Level.ERROR);

emf = Persistence.createEntityManagerFactory("examplePersistenceUnit"); em = emf.createEntityManager; }

@After public void cleanup { em.close; } } code

code format="java5" package entity;
 * CompanyTest.java**

import static org.junit.Assert.assertEquals;

import java.util.List;

import javax.persistence.EntityManager;

import org.junit.Test;

public class CompanyTest extends TestBase { private Company findCompanyNamed(final EntityManager em, String name) { return (Company) em.createQuery(               "select c from Company c where c.name=?1") .setParameter(1, name).getSingleResult; }

@Test public void createCompany { final Company c1 = new Company; c1.setName("The Company"); c1.setAddress(new Address("D Rd.", "", "Paris", "TX", "77382"));

em.getTransaction.begin; em.persist(c1); em.getTransaction.commit;

final Company foundCompany = 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. }

private Company createCompanyWithTwoEmployees { final Company c1 = new Company; c1.setName("The Company"); c1.setAddress(new Address("D Rd.", "", "Paris", "TX", "77382"));

final List people = PersonTest.generatePersonObjects; for (Person p : people) { c1.hire(p); }

em.getTransaction.begin; for (Person p : people) { em.persist(p); }       em.persist(c1); em.getTransaction.commit;

return c1; }

@SuppressWarnings("unchecked") @Test public void createCompanyAndHirePeople { createCompanyWithTwoEmployees;

final List list = em.createQuery("select p from Person p") .getResultList; assertEquals(2, list.size);

final Company foundCompany = (Company) em.createQuery(               "select c from Company c where c.name=?1").setParameter(1,                "The Company").getSingleResult; assertEquals(2, foundCompany.getEmployees.size); }

@Test public void hireAndFire { final Company c1 = createCompanyWithTwoEmployees; final List people = PersonTest.generatePersonObjects;

em.getTransaction.begin; for (Person p : people) { c1.fire(p); }       em.persist(c1); em.getTransaction.commit;

final Company foundCompany = findCompanyNamed(em, "The Company"); assertEquals(0, foundCompany.getEmployees.size); } } code

code format="java5" package entity;
 * PersonTest.java**

import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;

import java.util.ArrayList; import java.util.List;

import org.junit.Test;

public class PersonTest extends TestBase { public static List generatePersonObjects { final List people = new ArrayList; final Address a1 = new Address("A Rd.", "", "Dallas", "TX", "75001"); final Person p1 = new Person("Brett", 'L', "Schuchert", a1);

final Address a2 = new Address("B Rd.", "S2", "OkC", "OK", "73116"); final Person p2 = new Person("FirstName", 'K', "LastName", a2);

people.add(p1); people.add(p2);

return people; }

@SuppressWarnings("unchecked") @Test public void insertAndRetrieve { final List people = generatePersonObjects;

em.getTransaction.begin; for (Person p : people) { em.persist(p); }       em.getTransaction.commit;

final List list = em.createQuery("select p from Person p") .getResultList;

assertEquals(2, list.size); for (Person current : list) { final String firstName = current.getFirstName; final String streetAddress1 = current.getAddress .getStreetAddress1;

assertTrue(firstName.equals("Brett")                   || firstName.equals("FirstName")); assertTrue(streetAddress1.equals("A Rd.")                   || streetAddress1.equals("B Rd.")); }   } } code