2011-07-12 15 views
0

私はSpringとJPAに問題があります。基本的には、@Transactionalを除いてSpringフレームワークのコードで明示的に参照することなく、純粋なアプローチでSpringとJPAを使用しようとしています。だから私はどこが間違っているか知りたかった。 私のpersistence.xmlがある:JPA pure approchを持つSpring

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 
    <persistence-unit name="fb-persistence" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>it.synclab.fb.jpa.entity.Plugin</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
      <!-- da utilizzare solo in caso di creazione dello schema <property name="hibernate.hbm2ddl.auto" value="create-drop"/>--> 
      <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.connection.username" value="flussibatch"/> 
      <property name="hibernate.connection.password" value="caposele"/> 
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:XE"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

私のApplicationContextは次のとおりです。

import it.synclab.fb.jpa.entity.Plugin; 

public interface PluginDao { 

    public Plugin load (int id); 

    public void save(Plugin plg); 
} 

と私の実装は次のとおりです:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="fb-persistence" /> 
    </bean> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
    <bean name="pluginDao" class="it.synclab.fb.jpa.dao.impl.PluginDaoImpl" /> 
</beans> 

私のDAOインタフェースがある

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import org.springframework.transaction.annotation.Transactional; 
import it.synclab.fb.jpa.entity.Plugin; 


public class PluginDaoImpl implements PluginDao { 

    private EntityManager entityManager; 

    @PersistenceContext (unitName="fb-persistence") 
    public void setEntityManager(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

    @Override 
    public Plugin load(int id) { 
     return entityManager.find(Plugin.class, id); 
    } 

    @Override 
    @Transactional 
    public void save(Plugin plg) { 
     entityManager.persist(plg);  
    } 
} 

このはm Y「ホラー」:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: fb-persistence] Unable to configure EntityManagerFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at it.synclab.fb.jpa.test.PluginTest.main(PluginTest.java:26) 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: fb-persistence] Unable to configure EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:378) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
    at org.springframework.orm.jpa.LocalEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalEntityManagerFactoryBean.java:92) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
    ... 12 more 
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: it.synclab.fb.jpa.entity.StoreFileGet.idTransaction in it.synclab.fb.jpa.entity.Transaction.listStoreFileGet 
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:685) 
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:645) 
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:65) 
    at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1689) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1396) 
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1348) 
    at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1522) 
    at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1100) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:282) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:366) 
    ... 18 more 
+0

例外は、間違ったマッピングを休止すると言いますが、春には問題ありません。 – Augusto

答えて

1

it.synclab.fb.jpa.entityで it.synclab.fb.jpa.entity.StoreFileGet.idTransaction:mappedByは 未知のターゲットエンティティプロパティを参照します。これはあなたのエンティティであなたはこの場合、この

@OneToMany(mappedBy="something") 

のような注釈を持っていることを意味し

Transaction.listStoreFileGet、「何かが」relevの名前である必要があります他のエンティティのantフィールド。

+0

あなたはすばやく答えを投稿しています;) – Kowser

+0

恐らく疲労から恐怖を読んだことはありませんでした:P今私たちは持っています。つまり、いずれの場合でも、クラス属性をEntityManagerとして定義する必要がありますか? – giulius

+0

友達、saveメソッドを呼び出すときにコミットしないコードを投稿しました。なぜですか? – giulius

0

あなたは、あなたのpersistence.xmlでit.synclab.fb.jpa.entity.Plugin実体を入れているが、このエンティティが一覧表示されていない別のエンティティ(it.synclab.fb.jpa.entity.StoreFileGet)、に関連しています。すべてのエンティティがリストされている必要があります。 org.hibernate.AnnotationException:によって引き起こさ

関連する問題