package com.acme.jpa; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContextType; @Stateless @Local(PersistenceService.class) public class PersistenceServiceBean implements PersistenceService { @PersistenceContext(type = PersistenceContextType.TRANSACTION) private EntityManager em; @Override public List<Record> seed(boolean clear) { if (clear) { em.createQuery("delete from Record").executeUpdate(); } List<Record> records = new ArrayList<Record>(); Record a = new Record("Record A"); LineItem l1 = new LineItem(new BigDecimal(50)); a.addLineItem(l1); em.persist(a); records.add(a); return records; } @Override @SuppressWarnings("unchecked") public List<Record> selectAll() { return em.createQuery("select r from Record r").getResultList(); } @Override public Record select(Long id, boolean fetchLineItems) { Record r = em.find(Record.class, id); if (fetchLineItems) { r.getLineItems().size(); } return r; } @Override public boolean isManaged(Record record) { return em.contains(record); } @Override public void transact() { } public String getProvider() { return em.getDelegate().getClass().getName(); } public boolean isLazyLoadingPermittedOnClosedSession() { return "org.eclipse.persistence.internal.jpa.EntityManagerImpl".equals(getProvider()) ? true : false; } }