<!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: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt" bgcolor="#f5f5f5">
<!-- header here -->
<tbody>
<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">
<tbody>
<tr>
<td id="header-avatar-image-container" valign="top" style="padding: 0px; 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-4c8dcb19-5002-46bb-9b47-576c842adfa1" 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="rame" id="email_rame" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=rame" style="color:#6c797f;; color: #3b73af; text-decoration: none">Rame Shan</a> <strong>updated</strong> an issue </td>
</tr>
</tbody>
</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">
<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: 0px; 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: 0px; 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: 0pt; mso-table-rspace: 0pt">
<tbody>
<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/HHH" style="color: #3b73af; text-decoration: none">Hibernate ORM</a> / <a href="https://hibernate.atlassian.net/browse/HHH-10590" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-13dc3e80-1a32-4786-bf21-3115948c73c4" height="16" width="16" border="0" align="absmiddle" alt="Bug" style="vertical-align: text-bottom"></a> <a href="https://hibernate.atlassian.net/browse/HHH-10590" style="color: #3b73af; text-decoration: none">HHH-10590</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/HHH-10590" style="color: #3b73af; text-decoration: none">@MapKeyJoinColumn is creating un-necessary DB update</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td class="email-content-main mobile-expand wrapper-special-margin" style="padding: 0px; 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: 0pt; mso-table-rspace: 0pt">
<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: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <a class="user-hover" rel="rame" id="email_rame" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=rame" style="color:#6c797f;; color: #3b73af; text-decoration: none">Rame Shan</a> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td class="email-content-main mobile-expand issue-description-container" style="padding: 0px; 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: 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">
<tbody>
<tr>
<td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> <span class="diffcontext">We have the below entity mapping in our project. When we add a new phone to an existing employee then we see hibernate is generating un-necessary DB update - "update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?". It updates PHONE_TYPE_ID to itself. This update seems like harmless but it adds additional updates to DB. We are using hibernate 4.3.11 and Oracle DB.<br><br>Would like to see if there is any way we can avoid this un-necessary DB update. I think changing the association from Map to some other collection may resolve the issue but we would like to use Map.<br><br>Any config, mapping, annotation change would be helpful.<br><br>-------------------<br><br><br>{code:java}<br>@Entity<br>@Table(name = "EMPLOYEE")<br>public class Employee implements Serializable<br>{<br> @Id<br> @Column(name = "EMPLOYEE_ID")<br> private Integer id;<br><br> @OneToMany(mappedBy="owner", cascade = CascadeType.ALL, fetch = FetchType.EAGER)<br> @MapKeyJoinColumn(name = "PHONE_TYPE_ID")<br> private Map<PhoneType, Phone> phones = new HashMap<PhoneType, Phone>();<br><br> @NotNull<br> @Column(name = "FIRST_NAME")<br> private String firstName;<br><br> @NotNull<br> @Column(name = "LAST_NAME")<br> private String lastName;<br><br> protected Employee()<br> {<br> //for ORM<br> }<br><br> public Employee(Integer id, String firstName, String lastName)<br> {<br> this.id = id;<br> this.firstName = firstName;<br> this.lastName = lastName;<br> }<br><br> public long getId() <br> {<br> return id;<br> }<br><br> public Map<PhoneType, Phone> getPhones() <br> {<br> return phones;<br> }<br><br> public String getFirstName() <br> {<br> return firstName;<br> }<br><br> public String getLastName() <br> {<br> return lastName;<br> }<br><br> public void addPhones(Phone phone) <br> {<br> phones.put(phone.getPhoneType(), phone);<br> }<br><br> @Override<br> public boolean equals(Object o)<br> {<br> if (this == o)<br> {<br> return true;<br> }<br><br> if (o == null || getClass() != o.getClass())<br> {<br> return false;<br> }<br><br> Employee other = (Employee) o;<br> return new EqualsBuilder()<br> .append(id, other.id)<br> .append(firstName, other.firstName)<br> .append(lastName, other.lastName)<br> .isEquals();<br> }<br><br> @Override<br> public int hashCode()<br> {<br> return new HashCodeBuilder()<br> .append(id)<br> .append(firstName)<br> .append(lastName)<br> .toHashCode();<br> }<br><br> @Override<br> public String toString()<br> {<br> return String.format("id[%s], firstName[%s], lastName[%s]", id, firstName, lastName);<br> }<br><br><br>}<br><br>@Entity<br>@Table(name = "PHONE")<br>public class Phone implements Serializable <br>{<br> @Id<br> @ManyToOne<br> @JoinColumn(name = "EMPLOYEE_ID", referencedColumnName = "EMPLOYEE_ID")<br> @NotNull<br> private Employee owner;<br><br> @Id<br> @ManyToOne<br> @JoinColumn(name = "PHONE_TYPE_ID", nullable = false, updatable=false</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">, insertable=false</span> <span class="diffcontext">)<br> @NotNull<br> @Fetch(FetchMode.SELECT)<br> private PhoneType phoneType;<br><br> @NotNull<br> @Column(name = "PHONE_NUMBER")<br> private String phoneNumber;<br><br> protected Phone()<br> {<br> //for ORM<br> }<br><br> public Phone(Employee owner, PhoneType phoneType, String phoneNumber)<br> {<br> this.owner = owner;<br> this.phoneType = phoneType;<br> this.phoneNumber = phoneNumber;<br> }<br><br> public Employee getOwner() <br> {<br> return owner;<br> }<br><br> public PhoneType getPhoneType() <br> {<br> return phoneType;<br> }<br><br> public String getPhoneNumber() <br> {<br> return phoneNumber;<br> }<br><br> @Override<br> public boolean equals(Object o)<br> {<br> if (this == o)<br> {<br> return true;<br> }<br><br> if (o == null || getClass() != o.getClass())<br> {<br> return false;<br> }<br><br> Phone other = (Phone) o;<br> return new EqualsBuilder()<br> .append(owner, other.owner)<br> .append(phoneType, other.phoneType)<br> .append(phoneNumber, other.phoneNumber)<br> .isEquals();<br> }<br><br> @Override<br> public int hashCode()<br> {<br> return new HashCodeBuilder()<br> .append(owner)<br> .append(phoneType)<br> .append(phoneNumber)<br> .toHashCode();<br> }<br><br> @Override<br> public String toString()<br> {<br> return String.format("owner[%s], phoneType[%s], phoneNumber[%s]", owner, phoneType, phoneNumber);<br> }<br><br>}<br><br>@Entity<br>@Table(name = "PHONE_TYPE")<br>public class PhoneType implements Serializable <br>{<br> @Id<br> @Column(name = "PHONE_TYPE_ID")<br> private Integer id;<br><br> @NotNull<br> @Column(name = "PHONE_TYPE")<br> private String phoneType;<br><br> protected PhoneType()<br> {<br> //for ORM<br> }<br><br> public PhoneType(Integer id, String phoneType)<br> {<br> this.id = id;<br> this.phoneType = phoneType;<br> }<br><br> public long getId() {<br> return id;<br> }<br><br> public String getPhoneType() {<br> return phoneType;<br> }<br><br> @Override<br> public boolean equals(Object o)<br> {<br> if (this == o)<br> {<br> return true;<br> }<br><br> if (o == null || getClass() != o.getClass())<br> {<br> return false;<br> }<br><br> PhoneType other = (PhoneType) o;<br> return new EqualsBuilder()<br> .append(id, other.id)<br> .append(phoneType, other.phoneType)<br> .isEquals();<br> }<br><br> @Override<br> public int hashCode()<br> {<br> return new HashCodeBuilder()<br> .append(id)<br> .append(phoneType)<br> .toHashCode();<br> }<br><br> @Override<br> public String toString()<br> {<br> return String.format("id[%s], phoneType[%s]", id, phoneType);<br> }<br><br>}<br>{code}<br><br>DB table scripts:<br><br>{code:java}<br>create table EMPLOYEE<br>(<br> EMPLOYEE_ID number(10),<br> FIRST_NAME varchar(50),<br> LAST_NAME varchar2(50)<br>);<br><br>alter table EMPLOYEE<br>add constraint EMPLOYEE_PK primary key (EMPLOYEE_ID);<br><br>create table PHONE<br>(<br> EMPLOYEE_ID number(10),<br> PHONE_TYPE_ID number(10),<br> PHONE_NUMBER varchar2(50)<br>);<br><br>alter table PHONE<br>add constraint PHONE_PK primary key (EMPLOYEE_ID, PHONE_TYPE_ID);<br><br>create table PHONE_TYPE<br>(<br> PHONE_TYPE_ID number(10),<br> PHONE_TYPE varchar2(50)<br>);<br><br>alter table PHONE_TYPE<br>add constraint PHONE_TYPE_PK primary key (PHONE_TYPE_ID);<br><br>insert into EMPLOYEE (EMPLOYEE_ID, FIRST_NAME, LAST_NAME)<br>values(1, 'first-1', 'last-1');<br><br>insert into PHONE (EMPLOYEE_ID, PHONE_TYPE_ID, PHONE_NUMBER)<br>values(1, 10, '123-123-1234');<br><br>insert into PHONE_TYPE (PHONE_TYPE_ID, PHONE_TYPE)<br>values(10, 'Mobile');<br><br>insert into PHONE_TYPE (PHONE_TYPE_ID, PHONE_TYPE)<br>values(11, 'Home');<br>{code}<br><br>Test Class:<br><br>{code:java}<br>@Transactional(timeout = 60)<br>public class EmployeeTest extends AbstractTransactionalTestNGSpringContextTests<br>{<br> @Autowired<br> EmployeeRepository employeeRepository;<br><br> @Autowired<br> PhoneTypeRepository phoneTypeRepository;<br><br> @PersistenceContext(unitName = "base")<br> private EntityManager entityManager;<br><br> @Test<br> public void addPhoneType()<br> {<br> Employee employee = employeeRepository.findById(1);<br> PhoneType phoneType = phoneTypeRepository.findById(11);<br><br> Assert.assertEquals(employee.getPhones().size(), 1);<br><br> Phone phone = new Phone(employee, phoneType, "123-456-7890");<br> employee.addPhones(phone);<br><br> employeeRepository.persist(employee);<br> entityManager.flush();<br><br> Assert.assertEquals(employee.getPhones().size(), 2);<br> }<br><br>}<br>{code}<br><br>For the above test case, the employee with id=1 already exists in the DB. This employee has 'Mobile' phone - 123-123-1234. The test is adding a new phone 'Home' phone - 123-456-7890.<br><br>The test case succeeds but generates additional SQL update - "update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?", which updates PHONE_TYPE_ID to itself. Listed blow are the SQLs executed while running the test (We use P6Spy which shows the SQLs with parameter values) :<br><br><br>{code:java}<br>Hibernate: select employee0_.EMPLOYEE_ID as EMPLOYEE_ID1_43_0_, employee0_.FIRST_NAME as FIRST_NAME2_43_0_, employee0_.LAST_NAME as LAST_NAME3_43_0_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_43_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_1_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_2_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_2_, phones1_.PHONE_NUMBER as PHONE_NUMBER1_65_2_, phonetype3_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_4_, phonetype3_.PHONE_TYPE as PHONE_TYPE2_66_4_ from EMPLOYEE employee0_ left outer join PHONE phones1_ on employee0_.EMPLOYEE_ID=phones1_.EMPLOYEE_ID left outer join PHONE_TYPE phonetype2_ on phones1_.PHONE_TYPE_ID=phonetype2_.PHONE_TYPE_ID left outer join PHONE_TYPE phonetype3_ on phones1_.PHONE_TYPE_ID=phonetype3_.PHONE_TYPE_ID where employee0_.EMPLOYEE_ID=?<br>1457118857445|6|1|statement|select employee0_.EMPLOYEE_ID as EMPLOYEE_ID1_43_0_, employee0_.FIRST_NAME as FIRST_NAME2_43_0_, employee0_.LAST_NAME as LAST_NAME3_43_0_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_43_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_1_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_2_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_2_, phones1_.PHONE_NUMBER as PHONE_NUMBER1_65_2_, phonetype3_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_4_, phonetype3_.PHONE_TYPE as PHONE_TYPE2_66_4_ from EMPLOYEE employee0_ left outer join PHONE phones1_ on employee0_.EMPLOYEE_ID=phones1_.EMPLOYEE_ID left outer join PHONE_TYPE phonetype2_ on phones1_.PHONE_TYPE_ID=phonetype2_.PHONE_TYPE_ID left outer join PHONE_TYPE phonetype3_ on phones1_.PHONE_TYPE_ID=phonetype3_.PHONE_TYPE_ID where employee0_.EMPLOYEE_ID=?|select employee0_.EMPLOYEE_ID as EMPLOYEE_ID1_43_0_, employee0_.FIRST_NAME as FIRST_NAME2_43_0_, employee0_.LAST_NAME as LAST_NAME3_43_0_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_43_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_1_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_2_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_2_, phones1_.PHONE_NUMBER as PHONE_NUMBER1_65_2_, phonetype3_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_4_, phonetype3_.PHONE_TYPE as PHONE_TYPE2_66_4_ from EMPLOYEE employee0_ left outer join PHONE phones1_ on employee0_.EMPLOYEE_ID=phones1_.EMPLOYEE_ID left outer join PHONE_TYPE phonetype2_ on phones1_.PHONE_TYPE_ID=phonetype2_.PHONE_TYPE_ID left outer join PHONE_TYPE phonetype3_ on phones1_.PHONE_TYPE_ID=phonetype3_.PHONE_TYPE_ID where employee0_.EMPLOYEE_ID=1<br>1457118857462|-1||resultset|select employee0_.EMPLOYEE_ID as EMPLOYEE_ID1_43_0_, employee0_.FIRST_NAME as FIRST_NAME2_43_0_, employee0_.LAST_NAME as LAST_NAME3_43_0_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_43_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_1_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_1_, phones1_.PHONE_TYPE_ID as PHONE_TYPE_ID2_65_2_, phones1_.EMPLOYEE_ID as EMPLOYEE_ID3_65_2_, phones1_.PHONE_NUMBER as PHONE_NUMBER1_65_2_, phonetype3_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_4_, phonetype3_.PHONE_TYPE as PHONE_TYPE2_66_4_ from EMPLOYEE employee0_ left outer join PHONE phones1_ on employee0_.EMPLOYEE_ID=phones1_.EMPLOYEE_ID left outer join PHONE_TYPE phonetype2_ on phones1_.PHONE_TYPE_ID=phonetype2_.PHONE_TYPE_ID left outer join PHONE_TYPE phonetype3_ on phones1_.PHONE_TYPE_ID=phonetype3_.PHONE_TYPE_ID where employee0_.EMPLOYEE_ID=1|EMPLOYEE_ID3_43_1_ = 1, EMPLOYEE_ID3_65_1_ = 1, EMPLOYEE_ID3_65_2_ = 1, FIRST_NAME2_43_0_ = first-1, LAST_NAME3_43_0_ = last-1, PHONE_NUMBER1_65_2_ = 123-123-1234, PHONE_TYPE2_66_4_ = Mobile, PHONE_TYPE_ID1_66_4_ = 10, PHONE_TYPE_ID2_1_ = 10, PHONE_TYPE_ID2_65_1_ = 10, PHONE_TYPE_ID2_65_2_ = 10<br>Hibernate: select phonetype0_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_0_, phonetype0_.PHONE_TYPE as PHONE_TYPE2_66_0_ from PHONE_TYPE phonetype0_ where phonetype0_.PHONE_TYPE_ID=?<br>1457118857476|2|1|statement|select phonetype0_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_0_, phonetype0_.PHONE_TYPE as PHONE_TYPE2_66_0_ from PHONE_TYPE phonetype0_ where phonetype0_.PHONE_TYPE_ID=?|select phonetype0_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_0_, phonetype0_.PHONE_TYPE as PHONE_TYPE2_66_0_ from PHONE_TYPE phonetype0_ where phonetype0_.PHONE_TYPE_ID=11<br>1457118857477|-1||resultset|select phonetype0_.PHONE_TYPE_ID as PHONE_TYPE_ID1_66_0_, phonetype0_.PHONE_TYPE as PHONE_TYPE2_66_0_ from PHONE_TYPE phonetype0_ where phonetype0_.PHONE_TYPE_ID=11|PHONE_TYPE2_66_0_ = Home<br>Hibernate: insert into PHONE (PHONE_NUMBER, PHONE_TYPE_ID, EMPLOYEE_ID) values (?, ?, ?)<br>1457118857605|3|1|statement|insert into PHONE (PHONE_NUMBER, PHONE_TYPE_ID, EMPLOYEE_ID) values (?, ?, ?)|insert into PHONE (PHONE_NUMBER, PHONE_TYPE_ID, EMPLOYEE_ID) values ('123-456-7890', 11, 1)<br>Hibernate: update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?<br>1457118857611|2|1|statement|update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?|update PHONE set PHONE_TYPE_ID=10 where PHONE_TYPE_ID=10 and EMPLOYEE_ID=1<br>Hibernate: update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?<br>1457118857613|2|1|statement|update PHONE set PHONE_TYPE_ID=? where PHONE_TYPE_ID=? and EMPLOYEE_ID=?|update PHONE set PHONE_TYPE_ID=11 where PHONE_TYPE_ID=11 and EMPLOYEE_ID=1<br>1457118857635|21|1|rollback||<br>PASSED: addPhoneType<br>{code}<br></span> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td class="email-content-main mobile-expand " style="padding: 0px; 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 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">
<tbody>
<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">
<tbody>
<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-10590#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-083ec17f-5963-4a07-9162-6d5fb5192b14" 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-10590#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: 0px; 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: 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">
<tbody>
<tr>
<td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; 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">(v7.2.0-OD-03-010#72000-<span title="d4f0e55382250d79af2a76d8b0ff23d12af94da2" data-commit-id="d4f0e55382250d79af2a76d8b0ff23d12af94da2}">sha1:d4f0e55</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">
<tbody>
<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-f25a0d47-37e1-4243-a2c8-7713431c7bf7" 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>