This content has been marked as final.
Show 1 reply
-
1. Re: EmbeddId and TableGenerator
phil92100 Feb 17, 2007 9:42 AM (in response to phil92100)Some precisions, here is the code for the Embeddable
@Embeddable public class ContactId implements Serializable { @GeneratedValue(strategy = GenerationType.TABLE, generator = "contact_CODE_Gen") @TableGenerator(name = "contact_CODE_Gen", table = "SEQUENCE_BLOCK", pkColumnName = "NAME", valueColumnName = "IDX", pkColumnValue = "contact.CODE", initialValue = 1, allocationSize = 1) @Column(insertable = true, updatable = true, name = "CODE") private java.lang.Integer code; public ContactId() { System.out.println("ContactId - ContactId - constructor : "); } public ContactId(java.lang.Integer code) { System.out.println("ContactId - ContactId - constructor : " + code); this.code = code; } public java.lang.Integer getCode() { System.out.println("ContactId - getCode - code : " + code); return code; } public void setCode(java.lang.Integer code) { System.out.println("ContactId - setCode - code : " + code); this.code = code; } public boolean equals(Object o) { return ((o instanceof ContactId) && code.equals(((ContactId) o).getCode())); } public int hashCode() { return code.hashCode(); } }
and the entity@Entity(name = "ejb30/Contact") @EntityListeners( { ContactListener.class }) @Table(name = "contact") public class Contact implements Serializable { static final long serialVersionUID = 1171222220859l; @EmbeddedId protected ContactId id; @Basic(optional = false, fetch = FetchType.EAGER) @Column(insertable = true, updatable = true, name = "LIBELLE") private java.lang.String libelle; public Contact() { this.id = new ContactId(); } public Contact(java.lang.Integer code) { this.id = new ContactId(code); } public ContactId getId() { return id; } public void setId(ContactId id) { this.id = id; } public java.lang.String getLibelle() { return libelle; } public void setLibelle(java.lang.String libelle) { this.libelle = libelle; } }
And the JBoss 4.0.5 exception :15:32:19,156 WARN [JDBCExceptionReporter] SQL Error: 1048, SQLState: 23000 15:32:19,156 ERROR [JDBCExceptionReporter] Column 'CODE' cannot be null 15:32:19,156 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) 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:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:515) at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1491) at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1110) at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324) at org.jboss.tm.TxManager.commit(TxManager.java:240) at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:262) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:263) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239) Caused by: java.sql.BatchUpdateException: Column 'CODE' cannot be null at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:828) at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:519) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) ... 34 more
Thanks for your help.
Philippe