[hibernate-issues] [Hibernate-JIRA] Commented: (ANN-756) @Column annotation ignored when placed on entity's @Id property

sagi mann (JIRA) noreply at atlassian.com
Wed Jun 25 05:48:18 EDT 2008


    [ http://opensource.atlassian.com/projects/hibernate/browse/ANN-756?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30509 ] 

sagi mann commented on ANN-756:
-------------------------------

I forgot to mention the test code and the resulting output if the @Column annotation is place in the entity instead of the PK class.

Test code:
DomainIdentity di = new DomainIdentity(); 
di.setSecurityDomain(d); 
di.setSecurityIdentity(i); 
di.setUserAlias("xx"); 
em.persist(di); 

Stack trace:
full stack trace: 
could not bind value 'xx' to parameter: 4; Parameter index out of range (4 > number of parameters, which is 3). 
SQL Error: 0, SQLState: S1009 
Parameter index out of range (4 > number of parameters, which is 3). 
Could not synchronize database state with session 
org.hibernate.exception.GenericJDBCException: could not insert: [pu1.DomainIdentity] 
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.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2272) 
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665) 
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 
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:1000) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) 
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:523) 
at com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransaction.java:419) 
at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:371) 
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3792) 
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3571) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1354) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316) 
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210) 
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117) 
at $Proxy158.testDomain(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088) 
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567) 
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555) 
Caused by: java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3). 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) 
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288) 
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272) 
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108) 
at org.hibernate.type.StringType.set(StringType.java:26) 
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136) 
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116) 
at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:284) 
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2013) 
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2248) 
... 34 more 
EJB5018: An exception was thrown during an ejb invocation on [TestBean] 
javax.ejb.EJBException: Transaction aborted; nested exception is: javax.transaction.RollbackException: Transaction marked for rollback. 
javax.transaction.RollbackException: Transaction marked for rollback. 
at com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransaction.java:440) 
at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:371) 
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3792) 
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3571) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1354) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316) 
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210) 
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117) 
at $Proxy158.testDomain(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088) 
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567) 
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555) 
javax.ejb.EJBException: Transaction aborted; nested exception is: javax.transaction.RollbackException: Transaction marked for rollback. 
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3798) 
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3571) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1354) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316) 
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210) 
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117) 
at $Proxy158.testDomain(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687) 
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088) 
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563) 
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567) 
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)


> @Column annotation ignored when placed on entity's @Id property
> ---------------------------------------------------------------
>
>                 Key: ANN-756
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-756
>             Project: Hibernate Annotations
>          Issue Type: Bug
>    Affects Versions: 3.3.1.GA
>         Environment: hib core 3.2.6, my sql 5
>            Reporter: sagi mann
>
> Hibernate docs specify that when using a compound key class, a Hibernate optional feature is to place @Column annotations within the key class. The observed behavior is that Hibernate ignores @Column if placed ANYWHERE ELSE, for example, on the entity's ID properties. In other words, the standard JPA way of annotating ID fields is not working under Hibernate, and the "optional" feature is mandatory.
> Example how to reproduce (see comments inside the code regarding the inconsistency above). Accessors were omitted for clarity:
> // the identity class 
> @Entity 
> public class SecurityIdentity implements Serializable { 
>     
>     public SecurityIdentity() {} 
>     
>     @Id 
>     @Column(name="IDENTITY_ID") 
>     @GeneratedValue 
>     public Long getId() ... 
>     @Column(name="IDENTITY_NAME") 
>     public String getName() ... 
>     
>     @Override public boolean equals(Object o) ... 
>     @Override public int hashCode() ... 
> } 
> // the domain class 
> @Entity 
> public class SecurityDomain implements Serializable { 
>     
>     public SecurityDomain() {} 
>     
>     @Id 
>     @Column(name="DOMAIN_ID") 
>     @GeneratedValue 
>     public Long getId() ... 
>     @Column(name="DOMAIN_NAME") 
>     public String getName() ... 
>     
>     @Override public boolean equals(Object o) ... 
>     @Override public int hashCode() ... 
> } 
> // the domain-identity mapping class 
> @Entity 
> @IdClass(pu1.DomainIdentityPK.class) 
> public class DomainIdentity implements Serializable { 
>     
>     public DomainIdentity() {} 
>     @Id 
>     public Long getDomainId() ... 
>     @Id 
>     public String getUserAlias() ...    
>     @ManyToOne 
>     @JoinColumn(name="IDENTITY_ID") 
>     public SecurityIdentity getSecurityIdentity() ... 
>     @ManyToOne 
>     @JoinColumn(name="DOMAIN_ID", insertable=false, updatable=false) 
>     public SecurityDomain getSecurityDomain() { return securityDomain; } 
>     public void setSecurityDomain(SecurityDomain securityDomain) { 
>         this.securityDomain = securityDomain; 
>         this.domainId = (securityDomain != null ? securityDomain.getId() : null); 
>     } 
>     private SecurityDomain securityDomain; 
> } 
> // the map key class 
> public class DomainIdentityPK implements Serializable { 
>     
>     public DomainIdentityPK() { 
>     } 
>     
>     /********* @Column inconsistency - cannot be placed inside the entity - only inside the PK class *******/ 
>     @Column(name="DOMAIN_ID") 
>     public Long getDomainId() ... 
>     [b]@Column(name="ALIAS")[/b] 
>     public String getUserAlias() ... 
>     public boolean equals(Object o) ... 
>     public int hashCode() ... 
> } 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list