All other classes have been enhanced?

Let's start with the most obvious: is the <class> PrimaryKey registered in your 
persistence.xml? @Embeddable also have to be registered there.

LieGrue,
strub

--- ruslan <[EMAIL PROTECTED]> schrieb am Fr, 21.11.2008:

> Von: ruslan <[EMAIL PROTECTED]>
> Betreff: How to make compound id via @EmbeddedId
> An: [email protected]
> Datum: Freitag, 21. November 2008, 0:31
> Hi guys. Could you please tell me how to create compound id
> field using
> embedded class ? I tried this (which works in Hibernate):
> 
> package db;
> 
> import javax.persistence.*;
> import java.io.Serializable;
> 
> @SuppressWarnings({"ALL"})
> @Entity
> @Table(name = "electronic_books_data")
> public class ElectronicBooksDataEntity2
> {
>     @EmbeddedId
>     private PrimaryKey primaryKey = new PrimaryKey();
> 
>     @Basic
>     @Column(name = "data")
>     private
>     String data;
> 
>     @Override
>     public boolean equals(Object obj)
>     {
>         if (this == obj) return true;
>         if (obj == null || getClass() != obj.getClass())
> return false;
> 
>         ElectronicBooksDataEntity2 that =
> (ElectronicBooksDataEntity2) obj;
> 
>         if (!primaryKey.equals(that.primaryKey))
>             return false;
> 
>         if ( (getData() == null) || (that.getData() ==
> null) ||
> !getData().equals(that.getData()) )
>             return false;
> 
>         return true;
>     }
> 
>     @Override
>     public int hashCode()
>     {
>         int result = primaryKey != null ?
> primaryKey.hashCode() : 0;
>         return 31*result + ((getData() != null)?
> getData().hashCode() : 0);
>     }
> 
>     public String getData() { return data; }
>     public void setData(String data) { this.data = data; }
> 
>     @Embeddable
>     public static class PrimaryKey implements Serializable
>     {
>         @Basic
>         @Column(name = "book_id")
>         private int book_id;
> 
>         @Basic
>         @Column(name = "format")
>         private int format;
> 
>         @Override
>         public boolean equals(Object obj)
>         {
>             if (this == obj) return true;
>             if (obj == null || getClass() !=
> obj.getClass()) return false;
> 
>             PrimaryKey that = (PrimaryKey) obj;
>             return !((book_id != that.book_id)) &&
> format == that.format;
>         }
> 
>         @Override
>         public int hashCode()
>         {
>             return (31 * format) + book_id;
>         }
>     }
> }
> 
> 
> But it throws exception saying:
> 
> 47  mysql  INFO   [main] openjpa.Runtime - Starting OpenJPA
> 1.3.0-SNAPSHOT
> 109  mysql  INFO   [main] openjpa.jdbc.JDBC - Using
> dictionary class
> "org.apache.openjpa.jdbc.sql.MySQLDictionary".
> Exception in thread "main"
> <openjpa-1.3.0-SNAPSHOT-r422266:707655 fatal user
> error> org.apache.openjpa.persistence.ArgumentException:
> The type "class
> db.ElectronicBooksDataEntity2$PrimaryKey" has not been
> enhanced.
>     at
> org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1652)
>     at
> org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1626)
> 
> PS. I was able to do compound Id class using @IdClass, but
> I'm wondering if
> it's possible to do with @EmbeddedId.
> 
> 
> THANKS !!



Reply via email to