我创建了一个基本的 Spring MVC / JPA / Hibernate 应用程序。我正在尝试保存一个 UserProfile 实体以测试我是否可以真正持久保存它,但没有保存任何内容,也没有引发异常。
在控制器方法中,我创建了一个简单的 UserProfile(它是一个 @Entity)并将其发送到服务方法。UserProfileServiceImpl 类用@Service 注释,addUserProfile(UserProfile profile) 方法用@Transactional 注释。
在服务方法中,我所做的只是调用一个 DAO 方法(使用 @Repository 注释的类)。在 DAO 方法中,我所做的只是调用 entityManager.persist(object),其中 object 是用户配置文件对象。
- 没有任何内容写入服务器日志,并且日志级别为 INFO。
- Mysql 查询日志中没有出现任何内容(我知道查询日志有效)
- entityManager 被正确注入。
- 数据源已正确启动,因为当我输入错误的凭据时,我得到了 SQLExceptions。
我希望你能告诉我有什么问题。我将在下面发布我的一些代码和配置文件。
服务方式:
// The service method gets called from the controller.
// Its class is annotated with @Service
@Transactional(readOnly = false)
public void addUserProfile(UserProfile userProfile) {
userProfileDao.save(userProfile);
}
道法:
// The save(T object) method is in the GenericDaoJpa class, which is the superclass
// of the UserProfileDaoJPA class that is referenced from the service.
// I have established that the entityManager is there and the object is a
// UserProfile. The @Repository annotation is on the child class UserProfileDaoJpa.
public void save(T object) {
entityManager.persist(object);
}
主应用程序-context.xml
<context:property-placeholder location="classpath*:**/*.properties"/>
<import resource="spring-jpa.xml"/>
application-context-web.xml 文件
<mvc:annotation-driven />
<context:component-scan base-package="nl.codebasesoftware.produx" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
spring-jpa.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${db.driverClassName}"
p:url="${db.url}" p:username="${db.username}" p:password="${db.password}"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
持久性.xml
<persistence-unit name="mysqlPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
<!-- Needed to properly process @PersistenceContext -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
不知何故,这个设置没有向 Mysql 发送 SQL,但也没有抛出异常,所以我不知道发生了什么。希望你能帮忙:)