Cambridge Technology PartnersCommunity Documentation
@Dao(Person.class)
public abstract class PersonDao {
...
}
@Dao(Person.class)
public interface PersonDao {
...
}
public interface EntityDao<E, PK extends Serializable> {
E save(E entity);
E saveAndFlush(E entity);
void remove(E entity);
E findBy(PK primaryKey);
List<E> findAll();
Long count();
}
@Dao
public interface PersonDao extends EntityDao<Person, Long> {
Person findBySsn(String ssn);
}
public abstract class PersonDao extends AbstractEntityDao<Person, Long> {
public Person findBySSN(String ssn) {
return getEntityManager()
.createQuery("select p from Person p where p.ssn = ?1", Person.class)
.setParameter(1, ssn)
.getResultList();
}
public List<Person> findByCriteria(String name, Integer ageFrom, Integer ageTo) {
return criteria()
.eq(Person_.name, name)
.between(Person_.age, ageFrom, ageTo)
.createQuery()
.getResultList();
}
}
More details on using the JPA criteria support API are outlined in Chapter 6, JPA Criteria API Support.
@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
public @interface CustomerData {
}
public class CustomerDataSourceProducer {
...
@Produces @CustomerData
public EntityManager create(){
return emf.createEntityManager();
}
}
@Dao
@WithEntityManager(CustomerData.class)
public interface CustomerDao extends EntityDao<Customer, Long> {
...
}
@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
public @interface CustomerData {
CustomerType value();
}
public abstract class CustomerDao extends AbstractEntityDao<Customer, Long> {
@Override @CustomerData(CRM)
protected abstract EntityManager getEntityManager();
...
}