{"id":151,"date":"2018-07-13T09:16:39","date_gmt":"2018-07-13T07:16:39","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=151"},"modified":"2022-12-05T09:16:55","modified_gmt":"2022-12-05T08:16:55","slug":"spooky-missing-exceptions-9-objekt-wird-vom-eclipse-jpa-provider-nicht-in-die-datenbank-geschrieben","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=151","title":{"rendered":"Spooky (missing) Exceptions (9) &#8211; Objekt wird vom (Eclipse) JPA Provider nicht in die Datenbank geschrieben"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wildfly 10<\/li>\n\n\n\n<li>EE7<\/li>\n\n\n\n<li>Eclipselink<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Situation<\/h2>\n\n\n\n<p>Ein Subobjekt einer Entit\u00e4t (OneToOne), das \u00fcber cascade = CascadeType.ALL angebunden ist, wird bei merge nicht persistiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Analyse<\/h2>\n\n\n\n<p>In diesem Fall wurde das Objekt nicht im Oberobjekt instanziiert<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n    @OneToOne(cascade = CascadeType.ALL, mappedBy = \"repairWarranty\", fetch = FetchType.EAGER)\n    private StateChange stateChange = null;\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bei dem ersten Zugriff auf das Objekt \u00fcber den getter wurde das Objekt angelegt<\/li>\n\n\n\n<li>In einer Livecycle Methode @PostPersist wurde auf das Objekt zum ersten mal zugegriffen<\/li>\n<\/ul>\n\n\n\n<p>Wenn ein abh\u00e4giges Objekt erst in einer Livecycle Methode @PostPersist instanziiert wird, erkennt aktuell (Version 2.6.x) der (Eclipselink) JPA Provider nicht, dass dieses Objekt gespeichert werden muss. Auch wenn ohne ein refresh des Oberobjekts nochmals versucht wird ein merge durchzuf\u00fchren, werden die Daten nicht in die Datenbank geschrieben (sind aber im Objekt enthalten, was das Debugging deutlich erschwert).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L\u00f6sung<\/h2>\n\n\n\n<p>Entweder die (indirekte) Instanziierung in den Livecycle Methoden vermeiden oder die Objekte direkt anlegen<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n    @OneToOne(cascade = CascadeType.ALL, mappedBy = \"repairWarranty\", fetch = FetchType.EAGER)\n    private StateChange stateChange = new StateChange ();\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Umgebung Situation Ein Subobjekt einer Entit\u00e4t (OneToOne), das \u00fcber cascade = CascadeType.ALL angebunden ist, wird bei merge nicht persistiert. Analyse In diesem Fall wurde das Objekt nicht im Oberobjekt instanziiert @OneToOne(cascade = CascadeType.ALL, mappedBy = &#8222;repairWarranty&#8220;, fetch = FetchType.EAGER) private StateChange stateChange = null; Wenn ein abh\u00e4giges Objekt erst in einer Livecycle Methode @PostPersist instanziiert [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-151","post","type-post","status-publish","format-standard","hentry","category-jee","category-wildfly"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=151"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":152,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions\/152"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}