Home » Eclipse Projects » EclipseLink » EmbeddedObjects - fields not populated correctly(EmbeddedObjects - incorrect use of org.eclipse.persistence.internal.descriptors.PersistenceObjectAtt)
EmbeddedObjects - fields not populated correctly [message #670009] |
Thu, 12 May 2011 08:08  |
Eclipse User |
|
|
|
We have just moved over from toplink to eclipselink, and none of our embedded objects are being correctly populated on calls to em.find() (maybe others to). When debugging I can see that the correctly populated object has been returned from the db (and is in a cache?), but when building / copying/ cloning that object to return to the caller of em.find() it is failing to pull the value out of that object into the returned object. It appears that in here
(org.eclipse.persistence.internal.descriptors.PersistenceObjectAttributeAccessor.getAttributeValueFromObject(Object) ):
public Object getAttributeValueFromObject(Object object) {
return ((PersistenceObject)object)._persistence_get(this.attributeName);
}
the object passed in is the object containing the embedded object, yet this.attributeName is name of the field in the embedded object - in this case 'value' and returns null as there is no attribute named 'value' in the object passed in. I can only see that it would work if the embedded object itself was passed in, or if the attribute name was name of the embedded object.
in the calling method next down the stack frame the direct to field mapping is org.eclipse.persistence.mappings.DirectToFieldMapping[value- - >WSSDBA.WBR_USER.ACHOLLOOKUPONLY].
Something is not quite right with the weaving or something elseewhere, has anyone seen anything similar ?
Eclipselink 2.2.0.
I am trying to reproduce this is a standalone app/ ear but not having much look reproducing in such a scenario.
Thanks
this PersistenceObjectAttributeAccessor PersistenceObjectAttributeAccessor (id=4134) PersistenceObjectAttributeAccessor 4134
attributeField Field Field (id=4156) Field 4156
attributeName String "value" (id=4096) String 4096
isReadOnly boolean false boolean
isWriteOnly boolean false boolean
object Object User (id=3760) User 3760
_persistence_fetchGroup FetchGroup null null
_persistence_inLiquidityGroup_vh WeavedAttributeValueHolderInterface ValueHolder (id=3822) ValueHolder 3822
_persistence_listener PropertyChangeListener null null
_persistence_portfolio_vh WeavedAttributeValueHolderInterface ValueHolder (id=3851) ValueHolder 3851
_persistence_primaryKey Object "WSS" (id=3852) String 3852
_persistence_session Session null null
_persistence_shouldRefreshFetchGroup boolean false boolean
acHolLookupOnly JpaBoolean JpaBoolean (id=3853) JpaBoolean 3853
_persistence_listener PropertyChangeListener null null
value String "0" (id=4172) String 4172
areaUnit String "0058" (id=3854) String 3854
aspClientId int 0 int
bankManager JpaBoolean JpaBoolean (id=3855) JpaBoolean 3855
city String "ZAOPS" (id=3856) String 3856
cityUnit String "0054" (id=3857) String 3857
cmAllowCpwAdjustments JpaBoolean JpaBoolean (id=3858) JpaBoolean 3858
cmAllowOverrideExtBals JpaBoolean JpaBoolean (id=3859) JpaBoolean 3859
cmAllowOverrideWssBals JpaBoolean JpaBoolean (id=3860) JpaBoolean 3860
cmCashAdjusmentsToBeReviewed JpaBoolean JpaBoolean (id=3861) JpaBoolean 3861
cmTargetBalancingToBeReviewed JpaBoolean JpaBoolean (id=3862)
Daemon Thread [p: thread-pool-1; w: 93] (Suspended (breakpoint at line 30 in PersistenceObjectAttributeAccessor))
PersistenceObjectAttributeAccessor.getAttributeValueFromObject(Object) line: 30
DirectToFieldMapping(DatabaseMapping).getAttributeValueFromObject(Object) line: 523
DirectToFieldMapping(AbstractDirectMapping).valueFromRow(AbstractRecord, JoinedAttributeManager, ObjectBuildingQuery, CacheKey, AbstractSession, boolean) line: 1273
DirectToFieldMapping(DatabaseMapping).readFromRowIntoObject(AbstractRecord, JoinedAttributeManager, Object, CacheKey, ObjectBuildingQuery, AbstractSession, boolean) line: 1325
ObjectBuilder.buildAttributesIntoObject(Object, CacheKey, AbstractRecord, ObjectBuildingQuery, JoinedAttributeManager, boolean, AbstractSession) line: 344
AggregateObjectMapping.buildAggregateFromRow(AbstractRecord, Object, CacheKey, JoinedAttributeManager, ObjectBuildingQuery, boolean, AbstractSession, boolean) line: 362
AggregateObjectMapping.readFromRowIntoObject(AbstractRecord, JoinedAttributeManager, Object, CacheKey, ObjectBuildingQuery, AbstractSession, boolean) line: 1415
ObjectBuilder.buildAttributesIntoObject(Object, CacheKey, AbstractRecord, ObjectBuildingQuery, JoinedAttributeManager, boolean, AbstractSession) line: 344
ObjectBuilder.buildProtectedObject(boolean, ObjectBuildingQuery, AbstractRecord, AbstractSession, Object, ClassDescriptor, JoinedAttributeManager) line: 821
ObjectBuilder.buildObject(boolean, ObjectBuildingQuery, AbstractRecord, AbstractSession, Object, ClassDescriptor, JoinedAttributeManager) line: 657
ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuildingQuery, AbstractRecord, UnitOfWorkImpl, Object, ClassDescriptor, JoinedAttributeManager) line: 612
ObjectBuilder.buildObjectInUnitOfWork(ObjectBuildingQuery, JoinedAttributeManager, AbstractRecord, UnitOfWorkImpl, Object, ClassDescriptor) line: 565
ObjectBuilder.buildObject(ObjectBuildingQuery, AbstractRecord, JoinedAttributeManager) line: 497
ObjectBuilder.buildObject(ObjectLevelReadQuery, AbstractRecord) line: 456
ReadObjectQuery(ObjectLevelReadQuery).buildObject(AbstractRecord) line: 723
ReadObjectQuery.registerResultInUnitOfWork(Object, UnitOfWorkImpl, AbstractRecord, boolean) line: 766
ReadObjectQuery.executeObjectLevelReadQuery() line: 451
ReadObjectQuery(ObjectLevelReadQuery).executeDatabaseQuery() line: 1080
ReadObjectQuery(DatabaseQuery).execute(AbstractSession, AbstractRecord) line: 808
ReadObjectQuery(ObjectLevelReadQuery).execute(AbstractSession, AbstractRecord) line: 1040
ReadObjectQuery.execute(AbstractSession, AbstractRecord) line: 412
ReadObjectQuery(ObjectLevelReadQuery).executeInUnitOfWork(UnitOfWorkImpl, AbstractRecord) line: 1126
RepeatableWriteUnitOfWork(UnitOfWorkImpl).internalExecuteQuery(DatabaseQuery, AbstractRecord) line: 2842
RepeatableWriteUnitOfWork(AbstractSession).executeQuery(DatabaseQuery, AbstractRecord, int) line: 1521
RepeatableWriteUnitOfWork(AbstractSession).executeQuery(DatabaseQuery, AbstractRecord) line: 1503
RepeatableWriteUnitOfWork(AbstractSession).executeQuery(DatabaseQuery) line: 1463
EntityManagerImpl.executeQuery(ReadObjectQuery, LockModeType, AbstractSession) line: 781
EntityManagerImpl.findInternal(ClassDescriptor, AbstractSession, Object, LockModeType, Map<String,Object>) line: 725
EntityManagerImpl.find(Class<T>, Object, LockModeType, Map<String,Object>) line: 619
EntityManagerImpl.find(Class<T>, Object) line: 498
EntityManagerWrapper.find(Class<T>, Object) line: 291
UserServiceEJB.getUserFullWithLazyProps(String, EnumSet<EnumUserLazyProps>) line: 104
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
EJBSecurityManager.runMethod(Method, Object, Object[]) line: 1011
SecurityUtil.invoke(Method, Invocation, Object, Object[], Container, SecurityManager) line: 175
StatelessSessionContainer(BaseContainer).invokeTargetBeanMethod(Method, Invocation, Object, Object[], SecurityManager) line: 2929
StatelessSessionContainer(BaseContainer).intercept(Invocation) line: 4020
EJBObjectInvocationHandler.invoke(Class, Method, Object[]) line: 203
EJBObjectInvocationHandlerDelegate.invoke(Object, Method, Object[]) line: 77
$Proxy1079.getUserFullWithLazyProps(String, EnumSet) line: not available
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ReflectiveTie._invoke(String, InputStream, ResponseHandler) line: 154
CorbaServerRequestDispatcherImpl.dispatchToServant(Object, CorbaMessageMediator, byte[], ObjectAdapter) line: 687
CorbaServerRequestDispatcherImpl.dispatch(MessageMediator) line: 227
CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediator) line: 1846
CorbaMessageMediatorImpl.handleRequest(RequestMessage, CorbaMessageMediator) line: 1706
CorbaMessageMediatorImpl.handleInput(RequestMessage_1_2) line: 1088
RequestMessage_1_2.callback(MessageHandler) line: 223
CorbaMessageMediatorImpl.handleRequest(MessageMediator) line: 806
CorbaMessageMediatorImpl.dispatch() line: 563
CorbaMessageMediatorImpl.doWork() line: 2567
ThreadPoolImpl$WorkerThread.run() line: 555 
Attachment: el_vars.JPG
(Size: 290.48KB, Downloaded 479 times)
|
|
| | |
Re: EmbeddedObjects - fields not populated correctly [message #670064 is a reply to message #670056] |
Thu, 12 May 2011 10:50   |
Eclipse User |
|
|
|
I'll try without the weaving / newer version of eclipselink in while, prob next week...
in the meantime :
the mapped superclass at the top of the heirarchy
@MappedSuperclass
public class UserTahoe extends TahoeEntity implements CloneAccessor, Serializable{
private static final long serialVersionUID = 3875580327768987028L;
@Transient
private String oprIDTransient;
etc
private String areaUnit = " ";
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="PORTFOLIO",insertable=false,updatable=false)
private Portfolio portfolio;
@Column(name="PORTFOLIO")
private String portfolioId ;
etc
@Embedded
@AttributeOverride(name="value", column=@Column(name="ACHOLLOOKUPONLY"))
private JpaBoolean acHolLookupOnly = new JpaBoolean(false) ;
@Embedded
@AttributeOverride(name="value", column=@Column(name="SUPERVISOR"))
private JpaBoolean supervisor = new JpaBoolean(false) ;
@Embedded
@AttributeOverride(name="value", column=@Column(name="BANKMANAGER"))
private JpaBoolean bankManager = new JpaBoolean(false) ;
the @Entity itself
@Entity
@Table(name="WBR_USER")
public class User extends UserTahoe implements Serializable, LiveFieldAccess, StatusFieldAccess {
etc
the embedded object
@Embeddable
public class JpaBoolean implements Serializable {
private static final long serialVersionUID = -8018836031372234990L ;
/** Value for use in query parameters to match true */
public static final String TRUE = "1";
/** Value for use in query parameters to match false */
public static final String FALSE = "0";
private String value;
|
|
| | | | | | | | | | |
Goto Forum:
Current Time: Wed Jul 23 16:22:48 EDT 2025
Powered by FUDForum. Page generated in 0.05761 seconds
|