Monday, 19 August 2013

Java Persistence/Embeddables

An embeddable object can be shared between multiple classes. Consider a Address object, that both a Customer and an Orders contain. Both Customer  and Orders have their own tables.


TABLE CREATION:


ORDERS Table
CREATE TABLE ORDERS 
(
ID NUMBER NOT NULL
, ORDER_DATE Date
, BENF_NAME VARCHAR2(20)
, STREET1 VARCHAR2(255)
, STREET2 VARCHAR2(225)
, ZIPCODE VARCHAR2(6)
, STATE VARCHAR2(20)
, COUNTRY VARCHAR2(20)
, CITY VARCHAR2(50)
, CONSTRAINT ORDERS_PK PRIMARY KEY
(
ID
)
ENABLE
);

CUSTOMER Table
CREATE TABLE CUSTOMER 
(
ID NUMBER NOT NULL
, FIRST_NAME VARCHAR2(20)
, LAST_NAME VARCHAR2(45)
, PHONE_NUMBER VARCHAR2(15)
, EMAIL VARCHAR2(50)
, STREET1 VARCHAR2(255)
, STREET2 VARCHAR2(255)
, ZIPCODE VARCHAR2(6)
, STATE VARCHAR2(20)
, COUNTRY VARCHAR2(50)
, CITY VARCHAR2(50)
, CONSTRAINT CUSTOMER_PK PRIMARY KEY
(
ID
)
ENABLE
);

SEQUENCES AND TRIGGERS CREATION:


ORDERS Table
CREATE SEQUENCE ORDERS_SEQ NOCACHE;

CREATE TRIGGER ORDERS_TRG
BEFORE INSERT ON ORDERS
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT ORDERS_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
/

CUSTOMER Table
CREATE SEQUENCE CUSTOMER_SEQ NOCACHE;

CREATE TRIGGER CUSTOMER_TRG
BEFORE INSERT ON CUSTOMER
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT CUSTOMER_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
/

INSERT TEST DATA:


ORDERS Table
REM INSERTING into ORDERS
Insert into ORDERS (ID,ORDER_DATE,BENF_NAME,STREET1,STREET2,ZIPCADE,STATE,COUNTRY,CITY) values (1,to_timestamp('17-AUG-13','DD-MON-RR HH.MI.SSXFF AM'),'benf 1','street 1','street 2','11','state 11','country 11','city 11');
Insert into ORDERS (ID,ORDER_DATE,BENF_NAME,STREET1,STREET2,ZIPCADE,STATE,COUNTRY,CITY) values (2,to_timestamp('18-AUG-13','DD-MON-RR HH.MI.SSXFF AM'),'benf 2','street 1 -2','street 2 -2','22','state 22','country 22','city 22');

CUSTOMER Table
REM INSERTING into CUSTOMER
Insert into CUSTOMER (ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,STREET1,STREET2,ZIPCODE,STATE,COUNTRY,CITY) values (1,'cust f name 1','cust l name 1',null,'custfname1@mail.com','cust f name 1 street 1','cust f name 1 street 2','11','state1','cust f name 1 counntry 1','cust f name 1 city 1');
Insert into CUSTOMER (ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,STREET1,STREET2,ZIPCODE,STATE,COUNTRY,CITY) values (2,'cust f name 2','cust 2 name',null,'custfname2@mail.com','cust f name 2 street 1','cust f name 2 street 2','22','state2','cust f name 2 counntry','cust f name 2 city ');

CLASS CREATION:


Address Class
@Embeddable
public class Address {

@Column(name = "STREET1")
private String street1;
@Column(name = "STREET2")
private String street2;
@Column(name = "ZIPCODE")
private String zipcode;
@Column(name = "STATE")
private String state;
@Column(name = "COUNTRY")
private String country;
@Column(name = "CITY")
private String city;
//generate getters, setters, toString(), hashCode(),equals()
}


Orders Class
@Entity
@Table(name = "ORDERS")
public class Orders implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Integer id;
@Column(name = "ORDER_DATE")
@Temporal(TemporalType.DATE)
private Date orderDate;
@Column(name = "BENF_NAME")
private String benfName;
@Embedded
private Address address;
//generate getters, setters, toString(), hashCode(),equals()
}

Customer Class
@Entity
@Table(name = "CUSTOMER")
public class Customer implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Integer id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "PHONE_NUMBER")
private String phoneNumber;
@Column(name = "EMAIL")
private String email;
@Embedded
private Address address;
//generate getters, setters, toString(), hashCode(),equals()
}

JUNIT TEST CASE:


public class InheritanceJUnit {

static EntityManagerFactory emf;
static EntityManager em;
static EntityTransaction trx;

@BeforeClass
public static void initEntityManager() throws Exception {
emf = Persistence.createEntityManagerFactory("JavaApplicationJPAPU");
em = emf.createEntityManager();
trx = em.getTransaction();
}

@AfterClass
public static void closeEntityManager() throws Exception {
if (em != null) {
em.close();
}
if (emf != null) {
emf.close();
}
}

@Before
public void initTransaction() throws Exception {
trx.begin();
}

@After
public void endTransaction() throws Exception {
if (!trx.getRollbackOnly()) {
trx.commit();
}
}
@Test
@Ignore
public void testEmbeddableStrategyInsert() {

Address address = new Address();
address.setCity("Cust City");
address.setCountry("Cust Country");
address.setState("Cust State");
address.setStreet1("Cust Street1");
address.setStreet2("Cust Street2");
address.setZipcode("Zcode");

Customer customer = new Customer();
customer.setId(10);
customer.setFirstName("Cust FirstName");
customer.setLastName("Cust LastName");
customer.setPhoneNumber("Cust Phone");
customer.setEmail("CustMail@host.com");
customer.setAddress(address);
em.persist(customer);
System.out.println("Customer : " + customer);

Orders orders = new Orders();
orders.setId(10);
orders.setBenfName("Benf Name");
orders.setOrderDate(new Date());
//orders.setAddress(null);
em.persist(orders);
System.out.println("Orders : " + orders);
}

@Test
@Ignore
public void testEmbeddableStrategySelect() {

Customer customer = em.find(Customer.class, 10);
assertNotNull(customer);
System.out.println("Customer : " + customer);

Orders orders = em.find(Orders.class, 10);
assertNotNull(orders);
System.out.println("Orders : " + orders);

}

@Test
@Ignore
public void testEmbeddableStrategyUpdate() {
Address address = new Address();
address.setCity("Cust City1");
address.setCountry("Cust Country");
address.setState("Cust State");
address.setStreet1("Cust Street1");
address.setZipcode("Zcode");

Customer customer = em.find(Customer.class, 10);
assertNotNull(customer);
customer.setEmail("new Mail");
customer.setAddress(null);
em.merge(customer);
System.out.println("Customer : " + customer);

Orders orders = em.find(Orders.class, 10);
assertNotNull(orders);
orders.setBenfName("New Benf Name");
orders.setAddress(address);
em.merge(orders);
System.out.println("Orders : " + orders);


}

@Test
@Ignore
public void testEmbeddableStrategyDelete() {

Customer customer = em.find(Customer.class, 10);
assertNotNull(customer);
em.remove(customer);

Orders orders = em.find(Orders.class, 10);
assertNotNull(orders);
em.remove(orders);

}
}

No comments:

Post a Comment