Etc Jpa
Etc Jpa
Patrick Linskey
[email protected]
Introductions
Patrick Linskey
EJB Team Lead at BEA
Frequent presenter at JUGs, conferences (JavaOne,
JavaPolis, JAOO, etc.)
Active member of EJB and JDO expert groups
Co-author of Bitter EJB
EJB 3.0: A Two-Part Specification
@Entity
public class Order {
@Id @GeneratedValue long pk;
@Version int oplock;
@ManyToOne Customer purchaser;
@OneToMany(cascade=CascadeType.PERSIST) Set<Item> items =
new HashSet<Item>();
// no annotation needed for simple types
Date fulfillmentDate;
@Entity
public class Customer extends Person {
@Entity
@Table(name=“PRODUCTS”)
public class Product {
@Id @GeneratedValue
@Column(name=“PRODUCT_PK”)
long id;
@ManyToOne
@JoinColumn(name=“SUPP_FK”, referencedColumnName=“SUPP_PK”)
Supplier supplier;
...
}
Java Persistence APIs
return o;
}
}
Session Bean Code
@Stateless
public OrderManagerImpl
extends AbstractOrderManager
implements OrderManager {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Order newOrderForProduct(long productId) {
try {
Collection<Customer> customers = loadCustomersFromFile
(new File(“nightly-upload.csv”));
for (Customer customer : customers)
em.persist(customer);
em.getTransaction().commit();
} finally {
if (em.getTransaction().isActive())
em.getTransaction().rollback();
}
em.close();
emf.close();
Queries: EJBQL
Query q = em.createNamedQuery(“Order:findAllOrders”);
EJBQL Syntax Examples
em.persist(p);
Person p = em.merge(personDTO);
p.setLastUpdated(new Date());
}
Detachment
@Entity
@EntityListener(OrderValidator.class)
@PrePersist
if (item.getPrice() < 0)
@PreRemove
if (o.getFulfilledDate() != null)
}
Resources
EJB3 Preview:
http://solarmetric.com/kodo/beta/4.0.0EA
EJB3 Quick Reference:
http://solarmetric.com/resources/ejb-api-quickref.pdf
EJBQL Quick Reference:
http://solarmetric.com/resources/ejbql-quickref.pdf
More Info:
[email protected]