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 !!
