###質問内容
お世話になります。よろしくお願いします。
参考書を見ながらSpringを使用したJPAの勉強をしています。
サンプルプログラムを作成したのですが、
抽出は問題なく動いてくれるのですが更新処理が動いてくれません。
エラーも起きない状態で処理が終わってしまいます。
ネットで検索した結果や抽出がうまくいっているところから,
おそらく@Transactionalが正しく動作していないのだと思うのですが、
どの部分を修正すればよいのか、なのかわからない状態です。
ご指摘満載のコードだと思いますが、
以下に必要と思われる設定ファイルとコードを記載します。
必要な情報があればご教授ください。
よろしくお願いします。
###動作環境
Windows7(home)
java1.7.0_76
MySQL5.7
Spring3.2.3.RELEASE
###発生している問題・エラーメッセージ
特にエラーは起こりません。
###設定ファイル(application-config.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <!--データベースのプロパティ--> <context:property-placeholder location="classpath:spring/database.properties" /> <!--コネクションプーリング--> <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> <property name="driverClassName" value="${database.driverClassName}" /> <property name="url" value="${database.url}" /> <property name="username" value="${database.username}" /> <property name="password" value="${database.password}" /> <property name="testOnBorrow" value="true" /> <property name="testOnReturn" value="true" /> <property name="testWhileIdle" value="true" /> <property name="timeBetweenEvictionRunsMillis" value="1800000" /> <property name="numTestsPerEvictionRun" value="3" /> <property name="minEvictableIdleTimeMillis" value="1800000" /> </bean> <!--DBのファクトリクラスのbean宣言--> <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> </bean> </property> <property name="persistenceUnitName" value="persistenceUnit" /> <property name="dataSource" ref="dataSource" /> <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> </bean> <!--トランザクション処理宣言--> <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!--トランザクション処理宣言--> <tx:annotation-driven transaction-manager="transactionManager"/> <!--@Repositoryを使う宣言--> <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <jpa:repositories base-package="jp.springmyapp.dao" /> <!-- @Repositoryがついているクラスでおきた例外を変換するBeanのpost-processor--> <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> </beans>
###設定ファイル(database.properties)
database.driverClassName=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost:3306/spring_db database.username=root database.password=password
###設定ファイル(persistence.xml)
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/spring_db"/> </properties> </persistence-unit> </persistence>
###ソースコード(UserDao.java)
package jp.springmyapp.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import jp.springmyapp.model.UserModel; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; //DB関連アノテーション @Repository public class UserDao{ @PersistenceContext private EntityManager persistenceUnit; @Transactional public void saveAndFlush(UserModel mydata) { //追加 persistenceUnit.persist(mydata); } public List<UserModel> findByIdLike(String searchWord) { //クエリー実行(fromの後の名称は「テーブル名」ではなく「クラス(モデル)名」) Query query = persistenceUnit.createQuery("from UserModel where id like :sid") .setParameter("sid", searchWord); //結果の取得 @SuppressWarnings("unchecked") List<UserModel> list = query.getResultList(); return list; } public List<UserModel> findAll() { //クエリー実行(fromの後の名称は「テーブル名」ではなく「クラス(モデル)名」) Query query = persistenceUnit.createQuery("from UserModel"); //結果の取得 @SuppressWarnings("unchecked") List<UserModel> list = query.getResultList(); return list; } }
あなたの回答
tips
プレビュー