<!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: #333333; 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: 0; mso-table-rspace: 0; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-6bbb7196-13b0-4164-8e2a-29e38a0d701f" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0; 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="crancran" id="email_crancran" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=crancran" style="color:#6c797f;; color: #3b73af; text-decoration: none">Chris Cranford</a> <strong>commented</strong> on <a href="https://hibernate.atlassian.net/browse/HHH-8051" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-f9fcc901-f6e9-4715-b6dc-4345f2ea3965" height="16" width="16" border="0" align="absmiddle" alt="New Feature"> HHH-8051</a> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0; 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: 0; mso-table-rspace: 0; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <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: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; 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" height="10" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0; 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-8051" style="color: #3b73af; text-decoration: none">Re: targetAuditMode=RelationTargetAuditMode.NOT_AUDITED should allow for missing entity targets</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; border-bottom: none; padding-bottom: 0" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0; border-collapse: collapse; padding: 0 0 10px"> <p style="margin: 10px 0 0; margin-top: 0"><a href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=adar" class="user-hover" rel="adar" style="color: #3b73af; text-decoration: none">Adar Dembo</a> / <a href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=jhuang8285" class="user-hover" rel="jhuang8285" style="color: #3b73af; text-decoration: none">Jason Huang</a> / <a href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=bret540" class="user-hover" rel="bret540" style="color: #3b73af; text-decoration: none">Bret</a>:</p> 
                                                        <blockquote style="margin: 10px 0 0; border-left: 1px solid #cccccc; color: #707070; margin-left: 19px; padding: 10px 20px"> 
                                                            <p style="margin: 10px 0 0; margin-top: 0">#1 sounds fine to me, but why do we have to introduce a new enum value? Shouldn't all instances of NOT_AUDITED behave this way? I don't see how throwing an exception like this would ever be better.</p>
                                                        </blockquote> <p style="margin: 10px 0 0">That depends.</p> <p style="margin: 10px 0 0">Imagine a system where you have master versus transactional based data. You might elect to purge your transactional data because your system generates that data extremely fast while master data is meant to be around forever and grows at a much slower pace. </p> <p style="margin: 10px 0 0">When you introduce an audited entity into the picture here, perhaps its acceptable to null out <tt>#NOT_AUDITED</tt> references to transactional relations but you want a hard failure in cases where a <tt>#NOT_AUDITED</tt> might be linked to a slower, more master data reference that you guarantee should exist in the main schema.</p> <p style="margin: 10px 0 0">A configuration property wouldn't be good for this either. We ultimately need something we can specify at the property level to drive exactly how we're suppose to handle these situations per property. </p> <p style="margin: 10px 0 0">One option is obviously a new enumeration value as Adam suggested. Another might be to introduce another attribute on the <tt>@Audited</tt> annotation like <tt>targetNotFoundAction=ERROR/IGNORE</tt>. We could set the default value to <tt>IGNORE</tt>, meaning we gracefully handle these cases but a user could opt to set it to <tt>ERROR</tt>, allowing those very specific corner cases to be controllable.</p> 
                                                        <blockquote style="margin: 10px 0 0; border-left: 1px solid #cccccc; color: #707070; margin-left: 19px; padding: 10px 20px"> 
                                                            <p style="margin: 10px 0 0; margin-top: 0">For #1, my concern is how to distinguish a missing relation from a null relation. I think it will be better to provide as much information as possible, for example, instead of returning a null, create an empty object and populate the id field into it so that by comparing the id field we know whether the relation has been changed. From auditor's perspective, it's good to know any change.</p>
                                                        </blockquote> <p style="margin: 10px 0 0">Envers already returns instances that are only guaranteed to be a <em>partial</em> view anyway. A lot of what gets populated highly depends on the environment with what properties and associations are being audited. So I'm not convinced returning null vs an instance with just the identifier makes any difference.</p> <p style="margin: 10px 0 0">Imagine a situation where you have an entity that just requires an identifier and its attributes can all be null. How then would you differentiate those cases from the embedded place holder with just the identifier? It spins both ways imo.</p> 
                                                        <blockquote style="margin: 10px 0 0; border-left: 1px solid #cccccc; color: #707070; margin-left: 19px; padding: 10px 20px"> 
                                                            <p style="margin: 10px 0 0; margin-top: 0">Could envers use the existing "@NotFound" Hibernate annotation to infer that it should safely ignore cases where the auditing entity relationship is missing? Or possibly the implementation would be something similar? (Maybe there are cases where the not found should only apply to envers and not Hibernate overall)</p>
                                                        </blockquote> <p style="margin: 10px 0 0">This is indeed already supported.</p> <p style="margin: 10px 0 0">In fact, if you use the mapping the user supplied in the description and add <tt>@NotFound(action=IGNORE)</tt>, then you won't get the exception and the environment behaves gracefully by setting the field to null.</p> <p style="margin: 10px 0 0">But as you pointed out, doing this does affect how Hibernate behaves too and thus if the ORM side were to fault for any reason, the error would be silently ignored when perhaps you'd rather it not.</p> <p style="margin: 10px 0 0">But we can influence the same behavior specific just to Envers, we just need to determine the basis for the rule to use here.</p> <p style="margin: 10px 0 0">I believe we either need a new enum value or a new attribute on the <tt>@Audited</tt> annotation as a described above. I think I might personally be partial to the <tt>targetNotFoundAction</tt> attribute.</p> <p style="margin: 10px 0 0">Thoughts?</p> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> <script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "EmailMessage",
  "description": "View Issue",
  "potentialAction": {
    "@type": "ViewAction",
        "target": "https://hibernate.atlassian.net/browse/HHH-8051?inbox=true&focusedCommentId=91232&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-91232",
    "name": "View Comment"
      },
  "publisher": {
    "@type": "Organization",
    "name": "Atlassian",
    "url": "https://www.atlassian.com"
  }
}
</script> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-8051#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-7a540ea2-837c-4fc8-9060-149d1b12c080" 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: 0; 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-8051#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </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: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0; border-collapse: collapse; color: #999999; 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">(v1000.789.2#100032-<span title="1297bd3eab5b074297c5903168e23dc0a3f81003" data-commit-id="1297bd3eab5b074297c5903168e23dc0a3f81003}">sha1:1297bd3</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-090c91ca-0729-4deb-ae85-6f8b1d37975f" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    </body>
</html>