@Transient annotation in Embeddable...does not work
nectodev Oct 5, 2005 2:48 AMI have an entity bean called State mapped to a table "StateTB". Also StateContext is embedded object mapped to the same table which needs a reference "currentState" to the encapsulating class. Since that reference obviously will not be mapped to any column in the table, I marked the field as @Transient and also the corresponding getter. Following is a simpllified example code...
@Entity @Table(name = "StateTB") public class State{ protected int a; @Embedded protected StateContext stateContext = new StateContext(this); @Column(name = "colA") public getA(){...} public setA(){...} @Embedded @AttributeOverrides({ @AttributeOverride(name = "b", column = @Column(name = "colB")) }) public StateContext getStateContext() { return stateContext; } public void setStateCtx(StateContext stateCtx) { this.stateContext = stateCtx; } } @Embeddable(access = AccessType.PROPERTY) public class StateContext{ protected int b; @Transient protected State currentState; //constructor public StateContext(State state){ currentState = state; } public getB(){...} public setB(){...} @Transient public getCurrentState(){ return currentState; } public setCurrentState(State state){ currentState = state; } }
At deploy time JBoss seems to deploy the entity beans fine UNTIL it starts to "process collection mappings" where it throws the following exception:
:26:49,845 WARN [ServiceController] Problem creating service jboss.j2ee:service=EJB3,module=pu_services.ejb3
org.hibernate.MappingException: property not found: currentState
at org.hibernate.mapping.PersistentClass.getProperty(PersistentClass.java:351)
at org.hibernate.mapping.PersistentClass.getProperty(PersistentClass.java:356)
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:115)
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPas.............
.........
.........
and finally in the final summary report at the completion of server start up it throws the following report...
--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.jms:alias=QueueConnectionFactory
State: FAILED
Reason: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
ObjectName: jboss.j2ee:service=EJB3,module=pu_services.ejb3
State: FAILED
Reason: org.hibernate.MappingException: property not found: currentState
ObjectName: jboss.jms:alias=TopicConnectionFactory
State: FAILED
Reason: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
I cant figure what i am doing wrong... Has anyone used @Transient in an embeddable successfully before?
Any pointer will be greatly appreciated...
note that this is a spinoff of the original topic http://www.jboss.com/index.html?module=bb&op=viewtopic&t=69811