У меня, как правило, есть набор классов, похожих на менеджеров, и база для каждого класса менеджеров.База выглядит примерно так:
public class SomeBaseWritableDAO<T> {
@PersistenceContext
private EntityManager entityManager;
protected EntityManager getEntityManager() {
return entityManager;
}
public void save(T entity) {
getEntityManager().persist(entity);
}
public T update(T entity) {
return getEntityManager().merge(entity);
}
public void delete(T entity) {
getEntityManager().remove(entity);
}
}
, которая заботится о любом типе @Entity
.Затем, если мне нужно больше, чем базовые операции CRUD, я создам менеджер, специфичный для класса:
public class SpecificDAO extends SomeBaseWritableDAO<SpecificEntity> {
public SpecificEntity findBySomeCode(String inviteCode) {
final String queryString = "select model from SomeEntity model " +
"where model.code= :inviteCode";
Query query = getEntityManager().createQuery(queryString);
query.setParameter("inviteCode", inviteCode);
try {
return (SomeEntity) (query.getSingleResult());
}
catch( NoResultException nre ) {
return null;
}
}
}
Есть и другие способы сделать это, но этот шаблон хорошо работал в прошлом.Если у вас есть правильно спроектированная база данных со ссылочной целостностью, то хороший инструмент обратного инжиниринга, такой как Eclipse или IntelliJ, может генерировать ваши отношения один к одному и один ко многим.