2012-02-15 20 views
2

私はSpring JPAのいくつかの問題に直面しています。 Spring JPAプロジェクトを正常に設定しましたが、例外なくプロジェクトを実行できます。Spring JPAエンティティはデータベースに保存されません

エンティティをデータベースに保存する予定です。しかし、私がプロジェクトを実行しているときには、データベースに保存されず、例外もスローされません。

何が問題なのですか?私は実行時に例外をスローしていたので、多くのハイバート関連のjarファイルも追加しました。今、私は例外を取得していません。しかし、エンティティはデータベースに保存されません。 Springの設定とJavaクラスを添付しました。

小枝構成

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:osgi="http://www.springframework.org/schema/osgi" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/osgi 
      http://www.springframework.org/schema/osgi/spring-osgi.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx.xsd"> 



    <context:property-placeholder location="classpath:jdbc.properties"/> 


     <!-- Connection Pool --> 
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
     <property name="driverClass" value="${jdbc.driverClass}"/> 
     <property name="jdbcUrl" value="${jdbc.url}"/> 
     <property name="user" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <!-- JPA EntityManagerFactory --> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:dataSource-ref="dataSource"> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
        <property name="database" value="${jdbc.database}"/> 
        <property name="showSql" value="${jdbc.showSql}"/>     
      </bean>  
     </property> 
    </bean> 

    <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) --> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="entityManagerFactory"/> 


     <!-- Activates various annotations to be detected in bean classes for eg @Autowired--> 
     <context:annotation-config/> 

     <!-- enable the configuration of transactional behavior based on annotations --> 
     <tx:annotation-driven transaction-manager="transactionManager"/> 



    <!-- <context:component-scan base-package="com.vemanchery.timesheet.dao"/> --> 
    <!-- Implementation Class --> 
    <bean id="employeeDao" class="com.test.dao.impl.EmployeeDao" /> 
<!-- services --> 
    <bean id="employeeService" class="com.test.service.impl.EmployeeService" > 
     <property name="employeeDao" ref="employeeDao"/> 
    </bean> 

</beans> 

DAO

package com.test.dao.impl; 


import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.Query; 

import com.test.dao.interfaces.IEmployeeDao; 
import com.test.model.interfaces.IEmployee; 



//@Repository 
//@Component 
public class EmployeeDao implements IEmployeeDao{ 

    @PersistenceContext() 
    private EntityManager entityManager ; 

    @Override 
    public boolean createEmployee(IEmployee employee) {  
     this.entityManager.persist(employee); 

     return true; 
    } 


} 

サービス層

package com.test.service.impl; 

import org.springframework.beans.factory.annotation.Autowired; 

import com.test.dao.impl.EmployeeDao; 
import com.test.dao.interfaces.IEmployeeDao; 
import com.test.model.interfaces.IEmployee; 
import com.test.service.interfaces.IEmployeeService; 

public class EmployeeService implements IEmployeeService{ 

    @Autowired 
    IEmployeeDao employeeDao; 

    public IEmployeeDao getEmployeeDao() { 
     return employeeDao; 
    } 

    public void setEmployeeDao(IEmployeeDao employeeDao) { 
     this.employeeDao = employeeDao; 
    } 

    /** 
    * 
    */ 
    public boolean addEmployee(IEmployee employee){ 
     employeeDao.createEmployee(employee);  
     return false; 
    } 

} 

答えて

2

を追加します。あなたのサービスクラスまたはエンティティを保存する方法を超える注釈:あなたのDAO上@Repositoryを追加

@Transactional 
public boolean addEmployee(IEmployee employee){ 
    employeeDao.createEmployee(employee);  
    return false; 
} 

も良いアイデアですが、それはあなたの問題を引き起こしていません。

+0

私は注釈を追加しました。今私はスレッド "main" java.lang.ClassCastExceptionの例外を取得しています:$ Proxy14はcom.test.service.impl.EmployeeServiceにキャストできません \t main.Main.main(Main.java:16) – user414967

+0

@ user414967:実装やenable * proxy-target-class *オプションではなく、常にIEmployeeServiceインターフェースを使用してください。 –

+0

@Tomazそれは今働いています..ありがとうございます..もう一つの疑問です、もしSpring JPAが他のORMフレームワークに含まれなければならないということを意味しますか?ORMが結果を正しく達成できないのですか? – user414967

0

サービスやDAOのためのアノテーションベースの処理を有効にします(私は混合決してXML設定と注釈を持っているので、コンフィグ設定に問題がない場合は知らない)と

addEmployee @Transactional

あなたのサービスメソッドをマーク

希望します。

関連する問題