项目使用Hibernate(JPA),Spring和Maven。我的实体和DAO在单独的JAR中。
pom.xml:
<project ...>
...
<artifactId>database</artifactId>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.5.4-Final</version>
</dependency>
</dependencies>
</project>
道:
public class AbstractDAO<T extends BaseEntity> implements GenericDAO<T> {
private final Class<T> persistentClass;
private EntityManager entityManager;
public AbstractDAO(Class<T> 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:
<project ...>
...
<artifactId>api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
....
</dependencies>
...
</project>
AppContext.xml:
<bean id="authService" scope="singleton" class="com.test.management.AuthServiceImpl" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" name="EntityManagerFactory">
<property name="persistenceUnitName" value="default"></property>
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="${db.dialect}" />
</bean>
</property>
</bean>
<!-- Values are defined in db.properties -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" name="TransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven />
<bean id="userDAO" scope="singleton" class="com.test.database.dao.impl.UserDAOImpl">
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
服务:
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)
您必须在方法周围加上@Transactional批注:
@Transactional
public void fooBar() {
//Exception from this line
Session session = getEntityManager().unwrap(Session.class);
...
}
并在您的Spring的xml配置文件中使用以下声明启用spring @Transactional处理(txManager是您的管理器的ID)。
<tx:annotation-driven transaction-manager="txManager" />
问题:原因异常。 代码:
问题内容: 请给我建议,如何正确设置Jetty。我正在使用最新版本的码头(9.0.6.v20130930)。我命令服务器实现具体的servlet,它不起作用!我已经在Jetty工作了一点,却没有看到类似的东西。 -主类 -Frontend.class -Сonsole 问题答案: 您缺少三件事。 一个上下文 一个会话ID经理 一个会话处理程序(与相关的会话管理器) Main.java MyDump
此错误发生在,当方法运行时。 向添加注释不能解决问题-https://stackoverflow.com/a/32552558/3536552 你知道怎么修吗?
在Ignite缓存中的事务性方法中,我们使用多线程方法。
我试图从注入的EntityManager中打开Hibernate会话,因为我需要使用Hibernate的原生标准API。 当我尝试使用标准时,我得到以下异常: 但是,当我使用EntityManager本身的Query api时,一切都很好。 我的配置: db.xml PouzivatelDAOHibernate 不起作用: PouzivatelDAOHibernate,它确实工作: 编辑:我在JP
我已经尝试将COMMIT TRAN放入如果否则循环中,但我仍然会收到这个错误。 我必须在班级中注册一名学生。如果注册后的席位数量为负数,我必须将其反转并打印一条消息说无法注册。我已经放置了其他错误消息,只是为了看看交易是如何工作的。 这正确地更新了表,但是给出了以下错误: