title: How to create an entity with a composite primary key containing a generated value
body: <p>Using Hibernate + annotations, I'm trying to do the following:</p>
  
  <p>Two entities, Entity1 and Entity2.</p>
  
  <ul>
  <li>Entity1 contains a simple generated value primary key.</li>
  <li>Entity2 primary key is composed by a simple generated value + the id of entity one (with a many to one relationship)</li>
  </ul>
  
  <p>Unfortunately, I can't make it work.</p>
  
  <p>Here is an excerpt of the code:</p>
  
  <pre><code>@Entity
  public class Entity1 {
  
   @Id @GeneratedValue
   private Long id;
  
   private String name;
  
      ...
  }
  
  @Entity
  public class Entity2 {
  
   @EmbeddedId
   private Entity2PK pk = new Entity2PK();
  
   private String miscData;
  
      ...
  }
  
  @Embeddable
  public class Entity2PK implements Serializable {
  
   @GeneratedValue
   private Long id;
  
   @ManyToOne
   private Entity1 entity;
  }
  
  void test() {
  
      Entity1 e1 = new Entity1();
      e1.setName("nameE1");
      Entity2 e2 = new Entity2();
  
      e2.setEntity1(e1);
      e2.setMiscData("test");
  
      Transaction transaction = session.getTransaction();
      try {
       transaction.begin();
  
       session.save(e1);
       session.save(e2);
  
       transaction.commit();
      } catch (Exception e) {
       transaction.rollback();
      } finally {
       session.close();
      }
  }
  </code></pre>
  
  <p>When I run the test method I get the following errors:</p>
  
  <pre><code>Hibernate: insert into Entity1 (id, name) values (null, ?)
  Hibernate: call identity()
  Hibernate: insert into Entity2 (miscData, entity_id, id) values (?, ?, ?)
  07-Jun-2010 10:51:11 org.hibernate.util.JDBCExceptionReporter logExceptions
  WARNING: SQL Error: 0, SQLState: null
  07-Jun-2010 10:51:11 org.hibernate.util.JDBCExceptionReporter logExceptions
  SEVERE: failed batch
  07-Jun-2010 10:51:11 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
  SEVERE: Could not synchronize database state with session
  org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
   at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:254)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1001)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:339)
   at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
   at test.App.main(App.java:32)
  Caused by: java.sql.BatchUpdateException: failed batch
   at org.hsqldb.jdbc.jdbcStatement.executeBatch(Unknown Source)
   at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(Unknown Source)
   at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:247)
   ... 8 more
  </code></pre>
  
  <p>Note that I use HSQLDB. </p>
  
  <p>Any ideas about what is wrong ?</p>