openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kevin Sutter <kwsut...@gmail.com>
Subject Re: No table was given for persistent type
Date Fri, 27 Mar 2009 15:59:50 GMT
Okay, I couldn't resist...  I tried your source code and it worked for
me...  I did not use the maven plugin for building since I have maven 2.0.8
and it seems to require 2.0.6.  It also looks like you have a special
version of the plugin...  Anyway, I skipped the maven plugin.

I created a simple Eclipse project with your Person and Persister classes.
I also created a PersonTest main test class.  I'm using openjpa 1.2.0.  I'm
using Postgres, like you have.

I also modified your test slightly so that I wouldn't hit duplicate key.

I ran it with both pre-enhancing the Person entity and by using the
-javaagent option.  Both of them worked.

BTW, I found out that our sub-classing support will not even kick in if you
are using "final" types, so you're safe from that perspective.  You must be
enhancing somehow or else you would be getting an error message from the
sub-classing support.

I posted my project here:  http://filebin.ca/zuquzp/DavidLeangen.zip

You have the next move...  :-)
Kevin


On Fri, Mar 27, 2009 at 9:42 AM, Kevin Sutter <kwsutter@gmail.com> wrote:

> Hi David,
> Thanks for the additional information.  A couple of things to comment on...
>
> For some reason, you are getting different exception text than the first
> one you posted.  This exception text actually points back to your Person
> entity, so that's good:
>
> <openjpa-1.2.0-r422266:683325 fatal user error>
> org.apache.openjpa.persistence.ArgumentException: No table was given for
> persistent type "net.leangen.expedition.openjpa.internal.Person".
>
> Since we seem to be tripping over the tables, is there any chance that this
> problem is related to the other problem you've posted about the Schema Tool
> not generating the tables as expected?  From your configuration and the call
> stack, it looks like you are using the SynchronizeMappings property to help
> create the tables.
>
> I see that you have the <enhancer> element specific in your pom.xml.  Have
> you ensured that your entities are getting enhanced, either statically at
> build time or dynamically via a javaagent?  The property
> openjpa.RuntimeUnenhancedClasses set to "warn" or "unsupported" would help
> isolate this situation.
>
> It looks like our metadata repository is not getting populated correctly
> for this Person entity before we attempt to create the tables.  I'm not
> seeing anything in what you have provided that jumps out at me as being a
> problem.
>
> It sounds like you've tried stepping through the code.  What about TRACE?
> Sometimes, the Trace output indicates an earlier condition that is now
> affecting the current condition.
>
> If none of this helps isolate the problem, then we might have to actually
> try to reproduce it...  :-)  Like I said, I don't see anything unique with
> your setup.  Pretty vanilla.
>
> Kevin
>
>
> On Thu, Mar 26, 2009 at 8:24 PM, David Leangen <kodo@leangen.net> wrote:
>
>>
>> Thank you, Kevin.
>>
>>
>> On Thu, 2009-03-26 at 09:01 -0500, Kevin Sutter wrote:
>> > Hi David,
>> > I think we'll need a bit more information.
>>
>> Ok, no problem.
>>
>> I kept fiddling, but still no luck. I noticed that when stepping through
>> the code, even with the @Table annotation, for some reason value for
>> "given" is null.
>>
>> Anyway, here goes:
>>
>> Entity
>> _______________________________________________
>> package net.leangen.expedition.openjpa.internal;
>>
>> import javax.persistence.*;
>>
>> @Entity
>> @Table( name="person" )
>> public final class Person
>> {
>>    private static final long serialVersionUID = 1L;
>>
>>    private String sin;
>>    private String name;
>>
>>    public Person(){}
>>
>>    public Person( String aSin, String aName )
>>    {
>>        sin = aSin;
>>        name = aName;
>>    }
>>
>>    @Id
>>    public String getSin()
>>    {
>>        return sin;
>>    }
>>
>>    public void setSin( String sin )
>>    {
>>        this.sin = sin;
>>    }
>>
>>    @Basic
>>    public String getName()
>>    {
>>        return name;
>>    }
>>
>>    public void setName( String name )
>>    {
>>        this.name = name;
>>    }
>>
>>    @Override
>>    public String toString()
>>    {
>>        return getName();
>>    }
>>
>>    @Override
>>    public boolean equals( Object o )
>>    {
>>        if( this == o )
>>            return true;
>>
>>        if( !( o instanceof Person ) )
>>            return false;
>>
>>        final Person that = (Person)o;
>>        return this.getSin().equals( that.getSin() );
>>    }
>>
>>    @Override
>>    public int hashCode()
>>    {
>>        return 17*getSin().hashCode();
>>    }
>> }
>>
>> persistence.xml (edited)
>> _______________________________________________
>> <?xml version="1.0"?>
>> <persistence xmlns="http://java.sun.com/xml/ns/persistence"
>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>    version="1.0">
>>  <persistence-unit name="openjpa">
>>
>>
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>    <class>net.leangen.expedition.openjpa.internal.Person</class>
>>    <properties>
>>      <property name="openjpa.ConnectionURL"
>> value="jdbc:postgresql://xxxxx/xxxxx"/>
>>      <property name="openjpa.ConnectionDriverName"
>> value="org.postgresql.Driver"/>
>>      <property name="openjpa.ConnectionUserName" value="xxxxx"/>
>>      <property name="openjpa.ConnectionPassword" value="xxxxx"/>
>>      <property name="openjpa.Log" value="DefaultLevel=WARN,
>> Tool=INFO"/>
>>      <property name="openjpa.jdbc.SynchronizeMappings"
>> value="buildSchema(ForeignKeys=true)"/>
>>    </properties>
>>  </persistence-unit>
>> </persistence>
>>
>> "main" code
>> _______________________________________________
>>        final EntityManagerFactory entityManagerFactory =
>> Persistence.createEntityManagerFactory( "openjpa" );
>>
>>        final Persister persister = new
>> Persister( entityManagerFactory );
>>        final Person person = new Person( "12345", "David Leangen" );
>>        persister.createPerson( person );
>>        final Collection<Person> people = persister.getAllPeople();
>>        System.out.println("List of all people in db: ");
>>        for( final Person nextDude: people )
>>        {
>>            System.out.println( nextDude.getName() );
>>        }
>>
>>
>> Thread.currentThread().setContextClassLoader( currentClassLoader );
>>
>>
>> Persister code
>> _______________________________________________
>> package net.leangen.expedition.openjpa.internal;
>>
>> import java.util.*;
>> import javax.persistence.*;
>>
>> public class Persister
>> {
>>        private final EntityManagerFactory entityManagerFactory;
>>
>>        public Persister( EntityManagerFactory anEntityManagerFactory )
>>        {
>>            entityManagerFactory = anEntityManagerFactory;
>>        }
>>
>>        @SuppressWarnings("unchecked")
>>    public Collection<Person> getAllPeople()
>>        {
>>            final EntityManager entityManager =
>> entityManagerFactory.createEntityManager();
>>                final EntityTransaction transaction =
>> entityManager.getTransaction();
>>                try
>>                {
>>                        transaction.begin();
>>                        final List<Person> resultList =
>> entityManager.createQuery( "select p
>> from Persona p" ).getResultList();
>>                        return resultList;
>>                }
>>                finally
>>                {
>>                        transaction.commit();
>>                        entityManager.close();
>>                }
>>        }
>>
>>        public void createPerson( Person person )
>>        {
>>                final EntityManager entityManager =
>> entityManagerFactory.createEntityManager();
>>                final EntityTransaction transaction =
>> entityManager.getTransaction();
>>                try
>>                {
>>                        transaction.begin();
>>                        entityManager.persist( person );
>>                }
>>                finally
>>                {
>>                        transaction.commit();
>>                        entityManager.close();
>>                }
>>        }
>> }
>>
>>
>> pom.xml
>> _______________________________________________
>> <project>
>>  ...
>>
>>  <build>
>>    <plugins>
>>      <plugin>
>>        <groupId>org.codehaus.mojo</groupId>
>>        <artifactId>openjpa-maven-plugin</artifactId>
>>        <!-- use locally patched version for now -->
>>        <version>1.1-SNAPSHOT</version>
>>        <configuration>
>>          <includes>src/main/java/**/*.class</includes>
>>          <addDefaultConstructor>true</addDefaultConstructor>
>>
>> <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
>>          <schemaAction>add</schemaAction>
>>          <toolProperties>
>>            <property>
>>              <name>addDefaultConstructor</name>
>>              <value>true</value>
>>            </property>
>>            <property>
>>              <name>enforcePropertyRestrictions</name>
>>              <value>true</value>
>>            </property>
>>            <property>
>>              <name>properties</name>
>>              <value>${basedir}/META-INF/persistence.xml</value>
>>            </property>
>>          </toolProperties>
>>        </configuration>
>>        <executions>
>>          <execution>
>>            <id>enhancer</id>
>>            <phase>process-classes</phase>
>>            <goals>
>>              <goal>enhance</goal>
>>            </goals>
>>          </execution>
>>        </executions>
>>        <dependencies>
>>          <dependency>
>>            <groupId>org.apache.openjpa</groupId>
>>            <artifactId>openjpa</artifactId>
>>            <version>1.2.0</version>
>>          </dependency>
>>        </dependencies>
>>      </plugin>
>>    </plugins>
>>  </build>
>>
>> </project>
>>
>>
>> Exception
>> _______________________________________________
>> <openjpa-1.2.0-r422266:683325 fatal user error>
>> org.apache.openjpa.persistence.ArgumentException: No table was given for
>> persistent type "net.leangen.expedition.openjpa.internal.Person".
>>         at
>> org.apache.openjpa.jdbc.meta.MappingInfo.createTable(MappingInfo.java:437)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:241)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:259)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.strats.FullClassStrategy.map(FullClassStrategy.java:71)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.ClassMapping.setStrategy(ClassMapping.java:377)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:55)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:333)
>>        at
>>
>> org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:662)
>>        at
>>
>> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:549)
>>        at
>>
>> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308)
>>        at
>>
>> org.apache.openjpa.jdbc.meta.MappingRepository.getMapping(MappingRepository.java:285)
>>        at
>> org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:676)
>>        at
>> org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:748)
>>        at
>> org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:646)
>>        at
>>
>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:153)
>>        at
>>
>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119)
>>        at
>>
>> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189)
>>        at
>>
>> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>>        at
>>
>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
>>        at
>>
>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
>>        at
>>
>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
>>        at
>>
>> net.leangen.expedition.openjpa.internal.Persister.createPerson(Persister.java:45)
>>        at
>> net.leangen.expedition.openjpa.internal.Activator.start(Activator.java:58)
>>        at org.eclipse.osgi.framework.internal.core.BundleContextImpl
>> $2.run(BundleContextImpl.java:1009)
>>        at java.security.AccessController.doPrivileged(Native Method)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1003)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:984)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:265)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:257)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:257)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>        at
>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>        at java.lang.reflect.Method.invoke(Method.java:585)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:150)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:302)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:287)
>>        at
>>
>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:223)
>>        at java.lang.Thread.run(Thread.java:595)
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message