[google-appengine] operating on too many entity groups in a single transaction.
Hello Group, I have googled for this error and as far as I can see, the Appengine Datastore does not support more than 5 Groups in a transaction (at least in a XG Transaction). OK ... but how do I get the the following issue done: *1. I am using OpenSeccionInView Pattern. See my code below:* @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //1. Create new EntityManager for this call EntityManager em = factory.createEntityManager(); ThreadLocalEntityManager.set(em);//==(1) Create EM em.getTransaction().begin();//==(2) Begin Transaction try { chain.doFilter(request, response); em.getTransaction().commit();//==(3) Commit Transaction } catch (ConstraintViolationException cve) { //This exception is thrown on Constraint Violation JSR303 if(em.getTransaction().isActive()) { //This is usually never called em.getTransaction().rollback(); } } catch (Exception e) { if(em.getTransaction().isActive()) { em.getTransaction().rollback(); } e.printStackTrace(); } finally { if(em.isOpen()) { em.close();//==(4) Close EM } } } *2. I have Entities called JobCategory that stays in OneToMany relation with itself and OneToMany Relation with Job Entity (JPA is used with DataNucleus) *@Entity public class JobCategory { @OneToMany(mappedBy = "mainCategory", cascade = CascadeType.ALL) @OrderBy("i18nKey ASC") private List subCategories = new ArrayList(); @ManyToOne private JobCategory mainCategory; @OneToMany(mappedBy = "jobCategory") @OrderBy("creationDate DESC") private List jobs = new ArrayList(); ... /** * Method will return All JobCategories that are available in the database */ public static List findAllJobCategories() { EntityManager em = ThreadLocalEntityManager.get(); Query query = em.createQuery("SELECT e FROM " + JobCategory.class.getSimpleName() + " e ORDER BY e.i18nKey"); return (List) query.getResultList(); } ... } *My Question:* I woudl like to load all JobCategories (there are more than 10 main JobCategories with 5-6 Subcategories each), but as mentioned the DB does not support more than 5 Groups per transaction. The OSIV-Pattern, as shown in my code above and explained here: https://community.jboss.org/wiki/OpenSessionInView?_sscc=t ... opens one transaction for every DB-call which lets me get max 5 Grouped-Entities!? How do I get *all JobCategories* loaded properly!? I assume that there is something wrong with my OSIV-Pattern since it allows only one transaction per call. But this is exactly what the JBOSS example did!? Thank you in advance for your help!! Nermin -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscr...@googlegroups.com. To post to this group, send email to google-appengine@googlegroups.com. Visit this group at http://groups.google.com/group/google-appengine. For more options, visit https://groups.google.com/groups/opt_out.
[google-appengine] Re: JPA @PrePersist does not work on a child :(
I fixed it. the solution is explained on my previous post: https://groups.google.com/forum/?hl=de&fromgroups#!topic/google-web-toolkit/p9p4_r2Gv4U Best regards: Nermin Am Dienstag, 4. Juni 2013 16:24:32 UTC+2 schrieb nermin@gmail.com: > > Hello Group, > > I have a "probably simple" problem with my application which I am > obviously not able to solve. > > Two Classes: CompanyX, TradesmanX > CompanyX stays in a OneToOne Connection with TradesmanX > > I use @PrePersist on Tradesman in order to pre-set some fields (e.g. Has > password or set Account creation date) before the Object gets persisted in > the DB. > > My code is available here: > https://dl.dropboxusercontent.com/u/2983671/JPA_Problem/JPA_Problem.zip > > @Entity > public class CompanyX { > ... > @OneToOne(cascade=CascadeType.ALL) > private TradesmanX adminUser; > } > > > @Entity > public class TradesmanX { > ... > @PrePersist > public void myMethod(){ > System.out.println("Pre Persist"); > this.setFirstName("USER_X"); > } > ... > } > > //Here is how I persist them within my test servlet: > > private void testPersistenceTwo() { > > CompanyX company = new CompanyX(); > company.setName("my Comp"); > > TradesmanX user = new TradesmanX(); > user.setFirstName("Test_FName"); > user.setLastName("Test_Lname"); > > company.setAdminUser(user); > company.persist(); > } > > > The ERROR l am facing looks like follows: > > javax.persistence.PersistenceException: Detected attempt to establish > CompanyX(no-id-yet) as the parent of TradesmanX(7) but the entity > identified by TradesmanX(7) has already been persisted without a parent. A > parent cannot be established or changed once an object has been persisted. > at > org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:302) > at > org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:197) > at com.emajstor.server.persistence.CompanyX.persist(CompanyX.java:42) > at > com.emajstor.server.test.MyTestServlet.testPersistenceTwo(MyTestServlet.java:88) > at com.emajstor.server.test.MyTestServlet.doGet(MyTestServlet.java:41) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) > at > com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369) > at > com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352) > at > com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) > at > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) > at > com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > at > com.google.appengine.tools.develop
[google-appengine] JPA @PrePersist does not work on a child :(
Hello Group, I have a "probably simple" problem with my application which I am obviously not able to solve. Two Classes: CompanyX, TradesmanX CompanyX stays in a OneToOne Connection with TradesmanX I use @PrePersist on Tradesman in order to pre-set some fields (e.g. Has password or set Account creation date) before the Object gets persisted in the DB. My code is available here: https://dl.dropboxusercontent.com/u/2983671/JPA_Problem/JPA_Problem.zip @Entity public class CompanyX { ... @OneToOne(cascade=CascadeType.ALL) private TradesmanX adminUser; } @Entity public class TradesmanX { ... @PrePersist public void myMethod(){ System.out.println("Pre Persist"); this.setFirstName("USER_X"); } ... } //Here is how I persist them within my test servlet: private void testPersistenceTwo() { CompanyX company = new CompanyX(); company.setName("my Comp"); TradesmanX user = new TradesmanX(); user.setFirstName("Test_FName"); user.setLastName("Test_Lname"); company.setAdminUser(user); company.persist(); } The ERROR l am facing looks like follows: javax.persistence.PersistenceException: Detected attempt to establish CompanyX(no-id-yet) as the parent of TradesmanX(7) but the entity identified by TradesmanX(7) has already been persisted without a parent. A parent cannot be established or changed once an object has been persisted. at org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:302) at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:197) at com.emajstor.server.persistence.CompanyX.persist(CompanyX.java:42) at com.emajstor.server.test.MyTestServlet.testPersistenceTwo(MyTestServlet.java:88) at com.emajstor.server.test.MyTestServlet.doGet(MyTestServlet.java:41) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369) at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352) at com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:438) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) at