openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Leangen <k...@leangen.net>
Subject Re: No table was given for persistent type
Date Fri, 27 Mar 2009 01:24:23 GMT

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
View raw message