<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="https://hibernate.atlassian.net" /> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
            <!-- header here --> 
            <tr> 
                <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                    <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="https://secure.gravatar.com/avatar/6db67528c0dfb637ac5d957a22643392?d=mm&amp;s=48" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" /> 
                            </td> 
                            <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="gunnar.morling" id="email_gunnar.morling" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=gunnar.morling" style="color:#6c797f;; color: #3b73af; text-decoration: none">Gunnar Morling</a> <strong>commented</strong> on <a href="https://hibernate.atlassian.net/browse/HHH-9451" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-static-bug-0ccc5e9c-3453-4a6f-a3ee-5840aa8ccccc" height="16" width="16" border="0" align="absmiddle" alt="Bug" /> HHH-9451</a> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                    <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                        <tr> 
                            <!-- there needs to be content in the cell for it to render in some clients --> 
                            <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
                                &nbsp;
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-9451" style="color: #3b73af; text-decoration: none">Re: Extra state is not propagated from temporary entity entries</a> </span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff; border-bottom: none; padding-bottom: 0"> 
                                <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                    <tr> 
                                        <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> 
                                            <p style="margin: 10px 0 0 0">Related IRC discussion by <a href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=emmanuel" class="user-hover" rel="emmanuel" style="color: #3b73af; text-decoration: none">Emmanuel Bernard</a> and <a href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=gunnar.morling" class="user-hover" rel="gunnar.morling" style="color: #3b73af; text-decoration: none">Gunnar Morling</a>:</p> 
                                            <blockquote style="margin: 10px 0 0 0; border-left: 1px solid #ccc; color: #707070; margin-left: 19px; padding: 10px 20px"> 
                                                <p style="margin: 10px 0 0 0">gmorling so i'm working on leveraging the new EntityExtraState concept for avoiding a second read for embedded assocs 08:07<br /> gmorling basically that works 08:08<br /> gmorling but there is one glitch 08:08<br /> gmorling when using the new IDENTITY strategy for mongodb, the following happens: 08:08<br /> gmorling an &quot;temporary&quot; EE is created in the PC, then insert() is invoked which generates the id and also sets my new ogm extra state 08:09<br /> gmorling then, after that, the EE is overwritten with a new one 08:09<br /> gmorling that loses the ogm extra state attached to the original EE 08:09<br /> gmorling i managed to work-around it by overwriting the DefaultPersistEventListener 08:10<br /> gmorling which memoizes the original EE and then re-sets the ogm extra state to the new EE 08:10<br /> gmorling but it requires an ugly amount of C&amp;P from DefaultPersistEventListener 08:11<br /> gmorling as there are no suitable hooks which could be overridden 08:11<br /> gmorling emmanuel: you got any better ideas? 08:11<br /> emmanuel thinking and looking at the code 08:12<br /> emmanuel gmorling: got a line number for the EE copy in DefaultPersistEventListener 08:13<br /> emmanuel ? 08:13<br /> gmorling sec 08:13<br /> gmorling emmanuel: it happens in AbstractEntityInsertAction#makeEntityManaged() 08:14<br /> gmorling which is invoked through ActionQueue 08:14<br /> gmorling the trigger is addInsertAction() in DefaultPersistEventListener 08:15<br /> gmorling from what i can say, there is no way &quot;to intercept&quot; below the level of DefaultPersistEventListener 08:16<br /> emmanuel gmorling: what does your version look like? (Gist) 08:19<br /> gmorling emmanuel: <a href="https://gist.github.com/gunnarmorling/4102d7446e79b036b024" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">https://gist.github.com/gunnarmorling/4102d7446e79b036b024</a> 08:20<br /> gmorling it's almost a plain C&amp;P 08:20<br /> gmorling i'm only keeping the original EE on line 37 08:20<br /> gmorling and propagate it ogm extra state (which has been attached in betwen) in line 97 08:21<br /> emmanuel gmorling: I am a bit surprised that the code does not go through EntityIdentityInsertAction.postInsert() -&gt; getSession().getPersistenceContext().replaceDelayedEntityIdentityInsertKeys( delayedEntityKey, generatedId ); 08:31<br /> emmanuel can you check? 08:31<br /> gmorling looking 08:33<br /> gmorling emmanuel: isDelayed is false 08:35<br /> emmanuel gmorling: Ithink the proper fix we should propose ORM is the following 08:36<br /> emmanuel EntityEntryContext.addEntityEntry() 08:36<br /> emmanuel in the if ( alreadyAssociated ) { 08:36<br /> emmanuel you should copy the extra state 08:37<br /> gmorling yes, i thought the same 08:38<br /> emmanuel The only dubious case is, say I delete an entity but the EntityEntry is still present and marked DELETED. And I reattach this deleted entity via persist(). Should the state be copied? 08:39<br /> gmorling hmm 08:39<br /> gmorling wouldnt the new EE in that case have its own extra state already? 08:40<br /> emmanuel gmorling: why? 08:42<br /> emmanuel it would be carried over from DELETE, no? 08:42<br /> gmorling hum, i'm not sure; would have to try it out 08:43<br /> emmanuel the DELETE woudl copy the state, then the identity insert would add a marker EE and replace the DELETED EE then the new EE would be replaced witht he id 08:43<br /> emmanuel but I'm thinking that you can check the EE state 08:43<br /> emmanuel I suppose if you add a break point and you check when the EE is overridden in your case, the marker EE is in SAVING state 08:44<br /> emmanuel right that's most likely SAVING 08:45<br /> emmanuel so in that if alreadyAssociated block, you can check for the state to be SAVING before doing the copy 08:46<br /> gmorling yes, it's SAVING 08:46<br /> gmorling so you'd only copy the extra state if the existing EE is in state SAVING? 08:47<br /> emmanuel gmorling: that's safer as a first step 08:47<br /> gmorling k 08:47<br /> emmanuel also StatefulPersistenceContext.replaceDelayedEntityIdentityInsertKeys should have the copy logic too 08:47<br /> emmanuel here it seems they remove the EE first 08:48<br /> gmorling right 08:48<br /> emmanuel so we can do a two step like last time 08:52<br /> emmanuel your bad hack first 08:52<br /> emmanuel and a proposal for the proper fix in master and 4.x 08:52<br /> emmanuel gmorling: ^ 08:52<br /> gmorling +1 09:02<br /> emmanuel gmorling: thinking a bit more, I think you should not copy the extra state if the previous EE state is DELETED or GONE. And do the copy otherwise 09:15<br /> gmorling sounds reasonable 09:16<br /> gmorling we'd also need a new api on EE for getting &quot;all the extra state&quot; 09:16<br /> gmorling currently one can only ask for a specific one 09:16<br /> emmanuel ah fuck 09:26<br /> emmanuel gmorling: maybe an EntityEntry.copyExtraState(EntityEntry) gmorling 09:29<br /> emmanuel that way you cna keep the nasty chaining sauce hidden without exposing too much 09:29<br /> gmorling yes, that may work 09:30</p>
                                            </blockquote> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                    <tr> 
                                        <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                            <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                <tr> 
                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-9451#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-e1a64556-8981-486d-a5e3-46060b211d27" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle" /> </a> 
                                                    </td> 
                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://hibernate.atlassian.net/browse/HHH-9451#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> 
                                                    </td> 
                                                </tr> 
                                            </table> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <!-- there needs to be content in the cell for it to render in some clients --> 
                        <tr> 
                            <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
                                &nbsp;
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                    <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
                                 This message was sent by Atlassian JIRA <span id="footer-build-information">(v6.4-OD-07-004#64005-<span title="29a0beaca7c693975974e1d5d9f869ecb60599fc" data-commit-id="29a0beaca7c693975974e1d5d9f869ecb60599fc}">sha1:29a0bea</span>)</span> 
                            </td> 
                            <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-4547c118-4fa2-4947-90b5-84d6ed6d24d5" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" /> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
        </table>   
    </body>
</html>