В проекте используются Hibernate (JPA), Spring и Maven. Моя сущность и DAO в отдельном JAR.
pom.xml:
...
database
org.hibernate
hibernate-entitymanager
3.5.4-Final
DAO:
public class AbstractDAO implements GenericDAO {
private final Class persistentClass;
private EntityManager entityManager;
public AbstractDAO(Class entityClass) {
super();
this.persistentClass = entityClass;
}
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public EntityManager getEntityManager() {
return entityManager;
}
...
public void fooBar() {
//Exception from this line
Session session = getEntityManager().unwrap(Session.class);
...
}
....
У меня есть модуль, использующий Spring.
pom.xml:
...
api
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-orm
${spring.version}
....
...
AppContext.xml:
Сервис:
public class AuthServiceImpl implements AuthService {
@Autowired
private UserDAO userDAO;
@Override
public void authorization() {
userDAO.fooBar();
}
}
Когда я пытаюсь получить сеанс из EntityManager, я улавливаю это исключение:
java.lang.IllegalStateException: No transactional EntityManager available
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:223)
at $Proxy121.unwrap(Unknown Source)
Подробнее здесь: https://stackoverflow.com/questions/145 ... -available