<!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/9d09f05d50ce6624040126d9eaf727b8?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="emmanuel" id="email_emmanuel" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=emmanuel" style="color:#6c797f;; color: #3b73af; text-decoration: none">Emmanuel Bernard</a> <strong>created</strong> an issue 
                            </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 class="page-title-pattern-first-line " style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 10px"> <a href="https://hibernate.atlassian.net/browse/OGM" style="color: #3b73af; text-decoration: none">Hibernate OGM</a> / <a href="https://hibernate.atlassian.net/browse/OGM-656" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-static-newfeature-d8ecf977-08a9-48cb-9404-9e1856f9f579" height="16" width="16" border="0" align="absmiddle" alt="New Feature" style="vertical-align: text-bottom" /></a> <a href="https://hibernate.atlassian.net/browse/OGM-656" style="color: #3b73af; text-decoration: none">OGM-656</a> 
                                        </td> 
                                    </tr> 
                                    <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/OGM-656" style="color: #3b73af; text-decoration: none">Offer flexibility in the k/v key representations</a> </span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand  wrapper-special-margin" 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; padding-top: 10px; padding-bottom: 5px"> 
                                <table class="keyvalue-table" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Issue Type:
                                        </th> 
                                        <td class="has-icon" style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <img src="cid:jira-generated-image-static-newfeature-d8ecf977-08a9-48cb-9404-9e1856f9f579" height="16" width="16" border="0" align="absmiddle" alt="New Feature" style="vertical-align: text-bottom" /> New Feature 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Assignee:
                                        </th> 
                                        <td style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top">
                                             Unassigned 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Components:
                                        </th> 
                                        <td style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top">
                                             datastore 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Created:
                                        </th> 
                                        <td style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top">
                                             27/Nov/2014 01:27 AM 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Priority:
                                        </th> 
                                        <td class="has-icon" style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <img src="cid:jira-generated-image-static-major-b44efebf-640e-4812-b515-9671fb845728" height="16" width="16" border="0" align="absmiddle" alt="Major" style="vertical-align: text-bottom" /> Major 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
                                            Reporter:
                                        </th> 
                                        <td style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <a class="user-hover" rel="emmanuel" id="email_emmanuel" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=emmanuel" style="color:#6c797f;; color: #3b73af; text-decoration: none">Emmanuel Bernard</a> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand  issue-description-container" 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; padding-top: 5px; padding-bottom: 10px"> 
                                <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-top:0;margin-bottom:10px;; margin: 10px 0 0 0">Today the key used is a <tt>PersistentEntityKey</tt> class (and its association and idsource equivalent.</p> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">We could offer a few options to the user</p> 
                                            <h3 style="margin: 10px 0 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0 0"><a name="Options" style="color: #3b73af; text-decoration: none"></a>Options</h3> 
                                            <h4 style="margin: 10px 0 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0 0; margin-top: 10px"><a name="Mapkeysas%28Linked%29Maps" style="color: #3b73af; text-decoration: none"></a>Map keys as (Linked) Maps</h4> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">Instead of a specific type, one could return a Map&lt;String,Object&gt; to represent the key. Which might be simpler to use outside of Hibernate OGM.<br /> Note that for k/v that support externalizers, the persisted structure does not have to change necessarily.</p> 
                                            <h4 style="margin: 10px 0 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0 0"><a name="Directidforkeysinsinglecolumncases" style="color: #3b73af; text-decoration: none"></a>Direct id for keys in single column cases</h4> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">When the id is made of a single column and of a basic type, we can use that id as the key directly without having to create a <tt>PersistenceEntityKey</tt> structure.<br /> It makes for a more natural access than the ad-hoc OGM structure (or even a map).</p> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">Note that for <tt>PersistentAssociationKey</tt> it would not work as this key structure is almost always complex (multiple columns like fk + index etc).</p> 
                                            <h3 style="margin: 10px 0 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0 0"><a name="Adiscussiononkeymigration" style="color: #3b73af; text-decoration: none"></a>A discussion on key migration</h3> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">Storing the column names as part of the key can help during &quot;schema&quot; modifications but only in subset of them. <br /> A migration happens in batch or on the fly and relies ont he ability to lookup with the new id and if that fails, lookup with the old id and do a migration before putting it back.</p> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">There are several scenarios:</p> 
                                            <ul> 
                                                <li>
                                                    a new column is added (with a default value) or a column is removed: in this case, storing the column name does not help and a conversion / migration logic can be devised.
                                                </li> 
                                                <li>
                                                    reordering of columns. if two columns of the same type are reordered, then you need column names to differentiate the two between the old and new structure and to guarantee your equality comparison.
                                                </li> 
                                                <li>
                                                    when a type changes in one of the column, then you do not need the column name, the type will help during the equality comparison
                                                </li> 
                                                <li>
                                                    when the data in the id column change but neither its type nor its structure: then some id value conversion logic needs to be devised but the column name cannot help (say an id was the ssn 123456789 and is now the country-ssn FR-123456789).
                                                </li> 
                                                <li>
                                                    when the id value changes structure (same type) and the column name changes, then part of the logic in the previous point is optional and the column name can help.
                                                </li> 
                                            </ul> 
                                            <h3 style="margin: 10px 0 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0 0"><a name="Questions" style="color: #3b73af; text-decoration: none"></a>Questions</h3> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">There is an agreement that using <tt>PersistentEntityKey</tt> by default is preferred over the <tt>Map</tt> structure.</p> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">The remaining question is whether it is worth it to store the simple ids directly or via <tt>PersistentEntityKey</tt>. As the single benefit for migration is the case when the id value changes and the column name is changed (last point).</p> 
                                            <h3 style="margin: 10px 0 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0 0"><a name="References" style="color: #3b73af; text-decoration: none"></a>References</h3> 
                                            <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0 0">The discussion happened in the following thread <a href="http://lists.jboss.org/pipermail/hibernate-dev/2014-November/011929.html" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">http://lists.jboss.org/pipermail/hibernate-dev/2014-November/011929.html</a> and on IRC / Hangout</p> 
                                        </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/OGM-656#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-e7d2276c-2440-4e65-93f1-be8a9f086c30" 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/OGM-656#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-09-008#64005-<span title="e0b4c5ab1bbce262ee7b4aec6cdc090a17506290" data-commit-id="e0b4c5ab1bbce262ee7b4aec6cdc090a17506290}">sha1:e0b4c5a</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-bf6dd4bb-a4ca-4bc7-9ce9-f441643fbad4" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" /> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
        </table>   
    </body>
</html>