package net.java.cargotracker.infrastructure.persistence.jpa; import java.io.Serializable; import java.util.List; import java.util.UUID; import javax.enterprise.context.ApplicationScoped; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import net.java.cargotracker.domain.model.cargo.Cargo; import net.java.cargotracker.domain.model.cargo.CargoRepository; import net.java.cargotracker.domain.model.cargo.Leg; import net.java.cargotracker.domain.model.cargo.TrackingId; @ApplicationScoped public class JpaCargoRepository implements CargoRepository, Serializable { private static final long serialVersionUID = 1L; @PersistenceContext private EntityManager entityManager; @Override public Cargo find(TrackingId trackingId) { return entityManager.createNamedQuery("Cargo.findByTrackingId", Cargo.class).setParameter("trackingId", trackingId) .getSingleResult(); } @Override public void store(Cargo cargo) { // TODO See why cascade is not working correctly for legs. for (Leg leg : cargo.getItinerary().getLegs()) { entityManager.persist(leg); } entityManager.persist(cargo); } @Override public TrackingId nextTrackingId() { String random = UUID.randomUUID().toString().toUpperCase(); return new TrackingId(random.substring(0, random.indexOf("-"))); } @Override public List<Cargo> findAll() { return entityManager.createNamedQuery("Cargo.findAll", Cargo.class) .getResultList(); } }