<!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-5aaff90c-8cb2-40df-84d0-e2d73d34611b" 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>updated</strong> an issue </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"> </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 class="page-title-pattern-first-line " style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 10px"> <a href="https://hibernate.atlassian.net/browse/HHH" style="color: #3b73af; text-decoration: none">Hibernate ORM</a> / <a href="https://hibernate.atlassian.net/browse/HHH-11714" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-9795f1c9-3cc4-4ebe-9341-d74206e3fd29" height="16" width="16" border="0" align="absmiddle" alt="Bug" style="vertical-align: text-bottom"></a> <a href="https://hibernate.atlassian.net/browse/HHH-11714" style="color: #3b73af; text-decoration: none">HHH-11714</a> </td>
</tr>
<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-11714" style="color: #3b73af; text-decoration: none">Entities with InheritanceType.SINGLE_TABLE and SecondaryTable are not being saved correctly</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td class="email-content-main mobile-expand wrapper-special-margin" 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; padding-top: 10px; padding-bottom: 5px" bgcolor="#ffffff">
<table class="keyvalue-table" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0">
<tbody>
<tr>
<th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Change By:</th>
<td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <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> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td class="email-content-main mobile-expand issue-description-container" 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; padding-top: 5px; padding-bottom: 10px" 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"> <span class="diffcontext">A problem has been introduced since hibernate 5.1.3 whereby entities with InheritanceType.SINGLE_TABLE and SecondaryTable are not being saved properly any more. Some classes exist only in the top table, others use additional tables for specific attributes, so we are combining Single and Joined table inheritance, using SecondaryTable for the join.<br> <br>We are using spring-data-jpa version 1.11.1.release.<br><br>In our application we have a base SHAPE table and sub tables that store specific attributes for some other shape types<br>such as circles. In the case of a circle the table is SHAPE_CIRCLE and it contains the circle centre.<br><br>The shapes are wrapped further into a top level class which is used to save a collection of shapes in one go.<br><br>An outline of the entities is as follows:<br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=ShapeEntity.java}<br></span> <span class="diffcontext">@Entity<br>@Table(name = "SHAPE")<br>@Inheritance(strategy = InheritanceType.SINGLE_TABLE)<br>@DiscriminatorColumn(name = "SHAPE_TYPE", discriminatorType = DiscriminatorType.STRING)<br><br>public class ShapeEntity {<br><br> @Id<br> @SequenceGenerator(name = "SHAPE_ID_GENERATOR", sequenceName = "SHAPE_SEQ", allocationSize = 1)<br> @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SHAPE_ID_GENERATOR")<br> @Column(name = "SHAPE_ID", insertable = false, updatable = false)<br> private Long id;<br><br> .... other attributes ...<br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> <br>-------------------------</span> <span class="diffaddedchars" style="background-color:#ddfade;">{code}</span> <span class="diffcontext"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=ShapePolygonEntity.java}<br></span> <span class="diffcontext">@Entity<br>@DiscriminatorValue("POLYGON")<br>public class ShapePolygonEntity extends ShapeEntity {<br><br>// The polygon is stored entirely in the SHAPE table.<br>}<br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code}</span> <span class="diffcontext"><br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">--------------------</span> <span class="diffcontext"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=ShapeCircleEntity.java}</span> <span class="diffcontext"><br>@Entity<br>@DiscriminatorValue("CIRCLE")<br>@SecondaryTable(name = "SHAPE_CIRCLE", pkJoinColumns = @PrimaryKeyJoinColumn(name = "SHAPE_ID"))<br>public class ShapeCircleEntity extends ShapeEntity {<br><br> @Column(table = "SHAPE_CIRCLE")<br> private Geometry centre;<br> }<br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">---------------------</span> <span class="diffaddedchars" style="background-color:#ddfade;">{code}</span> <span class="diffcontext"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=GeographicArea.java}<br></span> <span class="diffcontext">@Entity<br>@Table(name="GEOGRAPHIC_AREA")<br>public class GeographicArea {<br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffcontext"> ...</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">..</span> <span class="diffcontext"><br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> <br></span> <span class="diffcontext"> /// The reference to the top level class.<br> @ManyToOne<br> @JoinColumn(name = "TOP_LEVEL_ID")<br> private TopLevelEntity topLevel;<br><br> // The reference to the shape.<br> @OneToOne(cascade = CascadeType.ALL)<br> @JoinColumn(name = "SHAPE_ID")<br> private ShapeEntity shape;<br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> <br></span> <span class="diffcontext"> ...</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">..</span> <span class="diffcontext"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code}<br></span> <span class="diffcontext"> <br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">----------------------</span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=TopLevel.java}</span> <span class="diffcontext"><br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffcontext">@Entity<br>@Table (name="TOP_LEVEL”)<br>public class TopLevel {<br><br> ....<br><br> @OneToMany(mappedBy = "topLevel", cascade = {CascadeType.ALL}, orphanRemoval = true)<br> private List<GeographicArea> geographicAreas;<br> <br> ....<br> } <br></span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">-------------</span> <span class="diffaddedchars" style="background-color:#ddfade;">{code}</span> <span class="diffcontext"><br><br>When TopLevel is saved, if a ShapePolygonEntity is in the list before a ShapeCircleEntity then inserts into the SHAPE table <br>are executed for the polygon but inserts are not generated in the SHAPE and SHAPE_CIRCLE table for the circle.<br>{</span> <span class="diffaddedchars" style="background-color:#ddfade;">noformat}</span> <span class="diffcontext"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{<br></span> <span class="diffcontext"> top = new TopLevelEntity ();<br> top. geographicAreas.add (new ShapePolygonEntity());<br> top. geographicAreas.add (new ShapeCircleEntity());<br>…<br> topRepository.save (top);<br>}<br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{noformat}<br>{noformat}<br></span> <span class="diffcontext">Sql > insert into top_level …;<br>Sql> insert into shape (for polygon);<br>Sql> insert into geographic_area (for polygon);<br>Sql> insert into geographic_area (for circle); - fails with FK violation, as the Shape doesn’t exist.<br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{noformat}</span> <span class="diffcontext"><br><br>If the ShapeCircleEntity goes before the ShapePolygonEntity then inserts<br>are generated in the SHAPE table for the polygon and inserts are generated in the SHAPE and SHAPE_CIRCLE table for the circle.<br>{</span> <span class="diffaddedchars" style="background-color:#ddfade;">noformat}</span> <span class="diffcontext"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{<br></span> <span class="diffcontext"> top = new TopLevelEntity ();<br> top. geographicAreas.add (new ShapeCircleEntity());<br> top. geographicAreas.add (new ShapePolygonEntity());<br>…<br> topRepository.save (top);<br>}<br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{noformat}<br>{noformat}<br></span> <span class="diffcontext">Sql > insert into top_level …;<br>Sql> insert into shape (for circle);<br>Sql> insert into shape_circle (additional circle attributes);<br>Sql> insert into shape (for polygon);<br>Sql> insert into geographic_area (for circle);<br>Sql> insert into geographic_area (for polygon);<br></span> <span class="diffaddedchars" style="background-color:#ddfade;">{noformat}</span> <span class="diffcontext"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br></span> <span class="diffcontext">This used to work either way in version 5.1.3.<br></span> </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-11714?inbox=true&",
"name": "View Issue"
},
"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-11714#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-5c7a0cf2-53e5-4d94-9ca4-72ac29a17158" 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-11714#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"> </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.929.1#100040-<span title="44337ab80a74bdc9c1cbf5e9a8750d0b97459db1" data-commit-id="44337ab80a74bdc9c1cbf5e9a8750d0b97459db1}">sha1:44337ab</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-bb5d1999-9c2e-4dcb-96f2-d42b5158e22d" 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>