You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Lu Jiang <je...@gmail.com> on 2010/08/06 12:09:20 UTC

Got exception when persisting an entity class with embedded class

Hi,all
I got an exception when trying to persist an entity class which has
embedded classes.
The steps are as following:
1.create the embedded class
@Embeddable
public class Borrower implements Serializable {
    private String borrowerName;
...}
2.create the entity class
@Entity
public class Book1 implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    @Embedded
    Borrower borrower;
...
}
3.create an instance of the entity class and persis it.
...
 Book1 book1=new Book1();
 Borrower borrower=new Borrower();
 borrower.setBorrowerName("borrowerName");
 book1.setName("book1");
 book1.setBorrower(borrower);
 em.getTransaction().begin();
 em.persist(book1);
 em.getTransaction().commit();
...
4.set the run time enhancer
-javaagent:D:\repository\org\apache\openjpa\openjpa\2.0.0\openjpa-2.0.0.jar

5.Run this problem and exception occur.
Exception in thread "main" <openjpa-2.0.0-r422266:935683 fatal user
error> org.apache.openjpa.persistence.ArgumentException: The type
"class entities.Borrower" has not been enhanced.
        at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1812)
        at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
        at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
        at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:494)
        at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1730)
        at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:458)
        at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1852)
        at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
        at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
        at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
        at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
        at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
        at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
        at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2568)
        at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
        at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
        at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:705)
        at org.apahce.geronimo.sample.jpa20.test.test.main(test.java:72)

I have met this enhancer problem at first,after setting the runtime
enhancer,the problem is solved.
However,when running the application which has entity class with
embedded class,the enhancer problem came out again.
Actually,I don't know whether this is known issue.Have someone
experienced the same problem with me?
Any suggestion is welcomed,thanks in advance.

Re: Got exception when persisting an entity class with embedded class

Posted by Lu Jiang <je...@gmail.com>.
Hi,Rick

Thanks a lot for your help.After trying your way,now I have
successfully got the right table without any exceptions..I am still on
the way of getting more familiar with OPENJPA.

Re: Got exception when persisting an entity class with embedded class

Posted by Rick Curtis <cu...@gmail.com>.
Lu -

Add entities.Borrower to the classes list in your persistence.xml file.

Thanks,
Rick

2010/8/8 Lu Jiang <je...@gmail.com>

> Hi,Rick
>
> Thanks for your reply.
>
> The persistence.xml is :
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="2.0"
> 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">
>  <persistence-unit name="CourseSelectPU" transaction-type="RESOURCE_LOCAL">
>
>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>    <class>entities.Book1</class>
>    <class>entities.Book2</class>
>    <class>entities.Book3</class>
>    <properties>
>      <property name="openjpa.ConnectionPassword" value="app"/>
>      <property name="openjpa.ConnectionDriverName"
> value="org.apache.derby.jdbc.ClientDriver"/>
>      <property name="openjpa.ConnectionUserName" value="app"/>
>      <property name="openjpa.ConnectionURL"
> value="jdbc:derby://localhost:1527/sample"/>
>      <property name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(ForeignKeys=true)"/>
>      <property name="openjpa.AutoDetach" value="close, commit,
> nontx-read"/>
>    </properties>
>  </persistence-unit>
> </persistence>
>
> Any comments?Thanks in advanceļ¼
>

Re: Got exception when persisting an entity class with embedded class

Posted by Lu Jiang <je...@gmail.com>.
Hi,Rick

Thanks for your reply.

The persistence.xml is :
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
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">
  <persistence-unit name="CourseSelectPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>entities.Book1</class>
    <class>entities.Book2</class>
    <class>entities.Book3</class>
    <properties>
      <property name="openjpa.ConnectionPassword" value="app"/>
      <property name="openjpa.ConnectionDriverName"
value="org.apache.derby.jdbc.ClientDriver"/>
      <property name="openjpa.ConnectionUserName" value="app"/>
      <property name="openjpa.ConnectionURL"
value="jdbc:derby://localhost:1527/sample"/>
      <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
      <property name="openjpa.AutoDetach" value="close, commit, nontx-read"/>
    </properties>
  </persistence-unit>
</persistence>

Any comments?Thanks in advanceļ¼

Re: Got exception when persisting an entity class with embedded class

Posted by Rick Curtis <cu...@gmail.com>.
Can you post the contents of your persistence.xml file?

Thanks,
Rick

On Fri, Aug 6, 2010 at 5:09 AM, Lu Jiang <je...@gmail.com> wrote:

> Hi,all
> I got an exception when trying to persist an entity class which has
> embedded classes.
> The steps are as following:
> 1.create the embedded class
> @Embeddable
> public class Borrower implements Serializable {
>    private String borrowerName;
> ...}
> 2.create the entity class
> @Entity
> public class Book1 implements Serializable {
>    private static final long serialVersionUID = 1L;
>    @Id
>    @GeneratedValue(strategy = GenerationType.AUTO)
>    private Long id;
>    private String name;
>    @Embedded
>    Borrower borrower;
> ...
> }
> 3.create an instance of the entity class and persis it.
> ...
>  Book1 book1=new Book1();
>  Borrower borrower=new Borrower();
>  borrower.setBorrowerName("borrowerName");
>  book1.setName("book1");
>  book1.setBorrower(borrower);
>  em.getTransaction().begin();
>  em.persist(book1);
>  em.getTransaction().commit();
> ...
> 4.set the run time enhancer
> -javaagent:D:\repository\org\apache\openjpa\openjpa\2.0.0\openjpa-2.0.0.jar
>
> 5.Run this problem and exception occur.
> Exception in thread "main" <openjpa-2.0.0-r422266:935683 fatal user
> error> org.apache.openjpa.persistence.ArgumentException: The type
> "class entities.Borrower" has not been enhanced.
>        at
> org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1812)
>        at
> org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
>        at
> org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
>        at
> org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:494)
>        at
> org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1730)
>        at
> org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:458)
>        at
> org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1852)
>        at
> org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
>        at
> org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
>        at
> org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
>        at
> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
>        at
> org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
>        at
> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
>        at
> org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2568)
>        at
> org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
>        at
> org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
>        at
> org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:705)
>        at org.apahce.geronimo.sample.jpa20.test.test.main(test.java:72)
>
> I have met this enhancer problem at first,after setting the runtime
> enhancer,the problem is solved.
> However,when running the application which has entity class with
> embedded class,the enhancer problem came out again.
> Actually,I don't know whether this is known issue.Have someone
> experienced the same problem with me?
> Any suggestion is welcomed,thanks in advance.
>