Могу ли я использовать дженерики и JPA вместе?Использование generics и jpa Методы EntityManager
Я пытаюсь сохранить объекты четырех классов в своем db. Вот мой класс PersistService:
public class PersistService<T> {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("fileUploadProject");
public static EntityManager getEntityManager() {
return emf.createEntityManager();
}
// Write Client to Database
public static <T> void persist(T obj) {
EntityManager em = getEntityManager();
EntityTransaction et = em.getTransaction();
et.begin();
em.persist(obj);
et.commit();
em.close();
}
}
Но тогда у меня возникает проблема с удалением объекта. У меня есть следующий метод в классе PersistService в дополнение к вышесказанному:
// Remove an object from the Database if they exist
public static <T> void remove(Long id) {
EntityManager em = getEntityManager();
EntityTransaction et = em.getTransaction();
<T> obj = em.find(<T>.class, id);
}
Последняя строка дает мне ошибку времени компиляции. Я пробовал <T>.class
T
Class<T>
и T.class
также, но он по-прежнему дает мне ошибку времени компиляции. Из-за этой ошибки, просто узнав о Type Erasure? Как решить эту проблему?
Вы должны попытаться сделать GenericDao и сделать дочерние классы продлить его – BrunoDM
Вы никогда не хотите, чтобы операции управляются в ваших 'методов PersistService'. Вы хотите управлять границами транзакций на основе логических фрагментов бизнес-логики.Как правило, вы выполняете несколько операций с базой данных, которые вы хотите или все преуспеете, или все сбой - в противном случае ваша система останется в непоследовательном состоянии, с которой сложно выполнить код и с которым сложно восстановить. – Rob
Вы не можете получить тип класса во время компиляции. вы потратите достаточно времени и ресурсов на поиски. –