tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2007
    Beiträge
    209
    Hallo Leute,

    Ich möchte JPA mit Spring benutzen. Allerdings komme ich immer auf einen Fehler der mich echt wahnsinnig macht. Ist sicher nur eine kleinigkeit.

    Die Fehlermeldung:
    java.lang.IllegalArgumentException: Object: de.ckel.dbmodel.Person@52e80740 is not a known entity type.

    Hier meine Person-Entity:
    PHP-Code:
    package de.ckel.dbmodel;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;

    @
    Entity
    public class Person {

        @
    Id
        
    @GeneratedValue(strategy GenerationType.TABLE)
        private 
    int id;
        private 
    String name;
        private 
    String adress;
        
        public 
    int getId() {
            return 
    id;
        }
        public 
    void setId(int id) {
            
    this.id id;
        }
        public 
    String getName() {
            return 
    name;
        }
        public 
    void setName(String name) {
            
    this.name name;
        }
        public 
    String getAdd() {
            return 
    adress;
        }
        public 
    void setAdd(String adress) {
            
    this.adress adress;
        }

    Hier die Spring Config:
    PHP-Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
            http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
        default-autowire="byName">
               

      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/jpa2"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
      </bean>
        
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="persistenceUnitName" value="books" />
        <property name="jpaVendorAdapter">
          <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
            <property name="showSql" value="false"/>
             <property name="generateDdl" value="false"/> 
            <property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
          </bean>
        </property>  
                <property name="loadTimeWeaver">
                    <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
                </property>    
      </bean>



         <context:annotation-config />
        <context:component-scan base-package="de"/>
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />
    </beans>
    und finally hier die persitence.xml aus dem Verz. META-INF:

    PHP-Code:
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
          <
    persistence-unit name="books" transaction-type="RESOURCE_LOCAL">
          <class>
    de.ckel.dbmodel.Person</class>
          </
    persistence-unit>
        </
    persistence
    Ich hab gegooglet wie ein wahnsinniger und bin mit meinem Latein echt am Ende.

    Hier ein Testcase, der den Fehler bringt (beim em.persist(person)

    Test:
    PHP-Code:
    RunWith(SpringJUnit4ClassRunner.class)
    @
    ContextConfiguration({"classpath:springtest.xml"})
    public class 
    Test {
        
        @
    Autowired
        GetCon con
    ;
        
        @
    org.junit.Test
        
    public void test(){
            
    System.out.println(con);
            
    con.setup();
        }
    ... 
    und GetCon
    PHP-Code:
    public class GetCon implements IOrderService{

        
    EntityManager em;
        
        @
    PersistenceContext
        
    public void setEM(EntityManager em){
            
    this.em em;
        }
        
        public 
    void setup(){
            
    System.out.println("SETUP");
                
    Person p = new Person();
                
    p.setAdd("Akdwpqokdo99");
                
    p.setName("Testname");
                
    em.persist(p);
                
            } 

    Vielen Dank!!
     
    Mfg
    Chri●̮̮̃•

  2. #2
    Registriert seit
    Apr 2007
    Beiträge
    209
    Also, das Problem war offensichtlich der LoadTimeWeaver. Wenn ich den auf InstrumentationLoadTimeWeaver ändere, gehts. Dummerweise muss ich nun immer das javaagent vm-argument aufrufen. gibt es da keine andere möglichkeit, sodass ich die Konfig bei beidem, meinem JUnit-Test UND Tomcat nutzen kann?

    Danke euch
    Christian
     
    Mfg
    Chri●̮̮̃•

  3. #3
    Registriert seit
    Apr 2007
    Beiträge
    209
    es gibt ne andere möglichkeit.

    eclipselink.weaving

    vielen dank für eure unglaubliche hilfe
     
    Mfg
    Chri●̮̮̃•

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    musst du unbedingt Load-Time Weaving verwenden? Ich verwende einfach component-scanning mit einem angepassten PersistenceUnitPostProcessor den ich an LocalContainerEntityManagerFactoryBean->persistenceUnitPostProcessors konfiguriere um Entities über mehrere Projekte hinweg zu registrieren...

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    public class MergingPersistenceUnitPostProcessor implements PersistenceUnitPostProcessor {
     
      @Getter
      @Setter
      protected String basePackage = "de.tutorials.app";
     
     
      @Override
      public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
        ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
        provider.addIncludeFilter(new AnnotationTypeFilter(Entity.class));
     
        Set<BeanDefinition> candidates = provider.findCandidateComponents(basePackage);
     
        for (BeanDefinition bd : candidates) {
          pui.getManagedClassNames().add(bd.getBeanClassName());
        }
      }
     
    }

    Damit startet die Anwendung immer noch schneller als mit Load-Time Weaving.
    Siehe auch hier:
    http://www.tutorials.de/java/356059-...ghlight=Lombok

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Interface als EJB Entity
    Von -AbeAdapti- im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 05.08.08, 16:32
  2. Entity Beans --> XML
    Von Java4U im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 4
    Letzter Beitrag: 05.08.08, 14:31
  3. The .NET Entity Objects Framework
    Von Thomas Darimont im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 19.02.06, 15:53
  4. Entity
    Von son gohan im Forum PHP
    Antworten: 8
    Letzter Beitrag: 07.02.06, 15:39
  5. MIME::Entity;
    Von webhostmedia im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 24.04.04, 17:23