Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 387313 - JPA-RS: Cannot create an entity containing reference (1-to-1) to another entity, using JPA-RS with static PU
Summary: JPA-RS: Cannot create an entity containing reference (1-to-1) to another enti...
Status: CLOSED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Eclipselink (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows 7
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard: jpa-rs submitted_patch
Keywords:
Depends on:
Blocks:
 
Reported: 2012-08-15 14:45 EDT by Gul Onural CLA
Modified: 2022-06-09 10:03 EDT (History)
2 users (show)

See Also:


Attachments
StaticAuction (2.55 KB, application/octet-stream)
2012-08-15 14:45 EDT, Gul Onural CLA
no flags Details
StaticBid (2.20 KB, application/octet-stream)
2012-08-15 14:46 EDT, Gul Onural CLA
no flags Details
StaticUser (3.89 KB, application/octet-stream)
2012-08-15 14:46 EDT, Gul Onural CLA
no flags Details
Glassfish Server logs (386.63 KB, application/octet-stream)
2012-08-15 14:47 EDT, Gul Onural CLA
no flags Details
Suggested Patch 1/2 (55.08 KB, application/octet-stream)
2012-08-24 15:35 EDT, Gul Onural CLA
tom.ware: iplog+
Details
Suggested Patch 2/2 (1.48 KB, application/octet-stream)
2012-08-24 15:35 EDT, Gul Onural CLA
tom.ware: iplog+
Details
Cleanup in ServerCrudTest (2.20 KB, patch)
2012-08-24 17:00 EDT, Gul Onural CLA
tom.ware: iplog+
Details | Diff
Use getServerURI when building rest request (8.07 KB, patch)
2012-08-27 09:44 EDT, Gul Onural CLA
tom.ware: iplog+
Details | Diff
Rename Bid.bid to Bid.amount in TestService tests (4.62 KB, patch)
2012-08-27 12:27 EDT, Gul Onural CLA
tom.ware: iplog+
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Gul Onural CLA 2012-08-15 14:45:00 EDT
Server :  Glassfish
JPA-RS : Static PU

Example I used to produce this problem has the following model :

User
Auction
Bid

Source files are attached. 

Basically, Bid has one to one relationship to auction and user. The test case I run:

1.) Creates a user 
2.) Creates an auction
3.) Creates a bid using user and the auction created above.

        StaticAuction auction = new StaticAuction();
        auction.setId(13012);
        auction.setName("Lego");
        auction.setStartPrice(500);
        auction.setImage("Starwars.jpg");
        auction.setEndPrice(1000);
        auction.setDescription("Lego auction");
        auction = restCreate(auction, "StaticAuction", StaticAuction.class);

        StaticAuction dbAuction = restRead(13012, "StaticAuction",
                StaticAuction.class);

        assertTrue("Wrong auction created.",
                auction.getId() == dbAuction.getId());

        // Create a user
        StaticUser user = new StaticUser();
        user.setId(1066);
        user.setName("Lego lover");
        user = restCreate(user, "StaticUser", StaticUser.class);
        StaticUser dbUser = restRead(1066, "StaticUser", StaticUser.class);

        assertTrue("Wrong user created.", user.getId() == dbUser.getId());

        // Create a bid
        StaticBid bid1 = new StaticBid();
        bid1.setAuction(null);
        bid1.setId(1301201);
        bid1.setTime(System.currentTimeMillis());
        bid1.setBid(510);
        bid1.setUser(user);
        bid1.setAuction(auction);

        bid1 = restCreate(bid1, "StaticBid", StaticBid.class);

User and auction creation succeed, but bid creation fails with the following exception (Glassfish log file is also attached):


[#|2012-08-15T14:19:12.463-0400|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=21;_ThreadName=Thread-2;|StandardWrapperValve[JPA-RS Service]: PWC1406: Servlet.service() for servlet JPA-RS Service threw exception

java.lang.IllegalStateException: Cannot get unfetched attribute [auction] from detached object org.eclipse.persistence.jpars.test.model.StaticBid@40e04e13.

	at org.eclipse.persistence.internal.queries.EntityFetchGroup.onUnfetchedAttribute(EntityFetchGroup.java:92)

	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.processUnfetchedAttribute(EntityManagerImpl.java:2697)

	at org.eclipse.persistence.jpars.test.model.StaticBid._persistence_checkFetched(StaticBid.java)

	at org.eclipse.persistence.jpars.test.model.StaticBid._persistence_get_auction(StaticBid.java)

	at org.eclipse.persistence.jpars.test.model.StaticBid._persistence_get_auction_vh(StaticBid.java)

	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:597)

	at org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor.getAttributeValueFromObject(MethodAttributeAccessor.java:82)

	at org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor.getAttributeValueFromObject(MethodAttributeAccessor.java:61)

	at org.eclipse.persistence.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:574)

	at org.eclipse.persistence.mappings.ForeignReferenceMapping.getAttributeValueFromObject(ForeignReferenceMapping.java:910)

	at org.eclipse.persistence.mappings.DatabaseMapping.getRealAttributeValueFromObject(DatabaseMapping.java:727)

	at org.eclipse.persistence.mappings.ObjectReferenceMapping.insert(ObjectReferenceMapping.java:1095)

	at org.eclipse.persistence.mappings.ObjectReferenceMapping.preInsert(ObjectReferenceMapping.java:579)

	at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:1074)

	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:433)

	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)

	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)

	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:295)

	at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)

	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:854)

	at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:753)

	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)

	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)

	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2876)

	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1602)

	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1584)

	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1535)

	at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:224)

	at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:123)

	at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3914)

	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1420)

	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:634)

	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1510)

	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:266)

	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1148)

	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:129)

	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:84)

	at org.eclipse.persistence.jpa.rs.util.ResourceLocalTransactionWrapper.commitTransaction(ResourceLocalTransactionWrapper.java:27)

	at org.eclipse.persistence.jpa.rs.PersistenceContext.create(PersistenceContext.java:204)

	at org.eclipse.persistence.jpa.rs.ServiceBase.create(ServiceBase.java:627)

	at org.eclipse.persistence.jpa.rs.ServiceBase.create(ServiceBase.java:579)

	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:597)

	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)

	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)

	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)

	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)

	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)

	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)

	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)

	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:597)

	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)

	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)

	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)

	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)

	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)

	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)

	at $Proxy130.create(Unknown Source)

	at org.eclipse.persistence.jpa.rs.__EJB31_Generated__Service__Intf____Bean__.create(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:597)

	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)

	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)

	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)

	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)

	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)

	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)

	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)

	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)

	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)

	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)

	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)

	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)

	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)

	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)

	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)

	at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)

	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)

	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)

	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)

	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)

	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)

	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)

	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)

	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)

	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)

	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

	at java.lang.Thread.run(Thread.java:662)
Comment 1 Gul Onural CLA 2012-08-15 14:45:34 EDT
Created attachment 219915 [details]
StaticAuction
Comment 2 Gul Onural CLA 2012-08-15 14:46:11 EDT
Created attachment 219916 [details]
StaticBid
Comment 3 Gul Onural CLA 2012-08-15 14:46:38 EDT
Created attachment 219917 [details]
StaticUser
Comment 4 Gul Onural CLA 2012-08-15 14:47:23 EDT
Created attachment 219918 [details]
Glassfish  Server logs
Comment 5 Gul Onural CLA 2012-08-24 15:35:29 EDT
Created attachment 220290 [details]
Suggested Patch 1/2
Comment 6 Gul Onural CLA 2012-08-24 15:35:52 EDT
Created attachment 220291 [details]
Suggested Patch 2/2
Comment 7 Gul Onural CLA 2012-08-24 17:00:48 EDT
Created attachment 220297 [details]
Cleanup in ServerCrudTest
Comment 8 Gul Onural CLA 2012-08-27 09:44:23 EDT
Created attachment 220336 [details]
Use getServerURI when building rest request
Comment 9 Gul Onural CLA 2012-08-27 12:27:53 EDT
Created attachment 220347 [details]
Rename Bid.bid to Bid.amount in TestService tests
Comment 10 Tom Ware CLA 2012-08-27 14:41:07 EDT
Above fixes checked in in a single transaction along with some added javadoc for PersistenceContext

Reviewed by: Tom Ware - reviewed submitted fix

Tested with JPA-RS testing on Java SE and on GlassFish
Comment 11 Eclipse Webmaster CLA 2022-06-09 10:03:34 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink