<!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/0effcb0f1da79bf6c86e530025242421?d=mm&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="bob lai" id="email_bob lai" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=bob+lai" style="color:#6c797f;; color: #3b73af; text-decoration: none">Bob Lai</a> <strong>edited a comment</strong> on <a href="https://hibernate.atlassian.net/browse/HHH-8057" style="color: #3b73af; text-decoration: none"><img src="https://hibernate.atlassian.net/images/icons/issuetypes/bug.png" height="16" width="16" border="0" align="absmiddle" alt="Bug" /> HHH-8057</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">
</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-8057" style="color: #3b73af; text-decoration: none">Re: Bad proxy behavior when using store_data_at_delete and audited parent/child relationships</a> </span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="text-paragraph-pattern-top" class="email-content-main mobile-expand comment-top-special-margin 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; padding-top: 10px"> <span class="diffcontext">Hi All,<br />I test the code from Hibernate 4.2.1 and 4.2.6Final<br />in the auditReader , It generate the sql seem for the child's REV for delete action is not treat as insert and update action.<br />below the generated result<br />{code}<br />/* select<br /> e__ <br /> from<br /> tpdrg.Child_AUD e__ <br /> where<br /> e__.parent_name = :parent_name <br /> and (<br /> (<br /> e__.originalId.REV.id = (<br /> select<br /> max(e2__.originalId.REV.id) <br /> from<br /> tpdrg.Child_AUD e2__ <br /> where<br /> e2__.originalId.REV.id <= :revision <br /> and e__.originalId.name = e2__.originalId.name<br /> ) <br /> and REVTYPE != :delrevisiontype<br /> ) <br /> or (<br /> originalId.REV.id = :revision <br /> and REVTYPE = :delrevisiontype<br /> )<br /> ) */ select<br /> child_aud0_.name as name1_1_,<br /> child_aud0_.REV as REV2_1_,<br /> child_aud0_.REVTYPE as REVTYPE3_1_,<br /> child_aud0_.parent_name as parent_n4_1_ <br /> from<br /> Child_AUD child_aud0_ <br /> where<br /> child_aud0_.parent_name=? <br /> and (<br /> child_aud0_.REV=(<br /> select<br /> max(child_aud1_.REV) <br /> from<br /> Child_AUD child_aud1_ <br /> where<br /> child_aud1_.REV<=? <br /> and child_aud0_.name=child_aud1_.name<br /> ) <br /> and child_aud0_.REVTYPE<>? <br /> or child_aud0_.REV=? <br /> and child_aud0_.REVTYPE=?<br /> )<br />03 Dec 2013 16:02:52 [main ] TRACE BasicBinder - binding parameter [1] as [VARCHAR] - Parent<br />03 Dec 2013 16:02:52 [main ] TRACE BasicBinder - binding parameter [2] as [INTEGER] - 2147483647<br />03 Dec 2013 16:02:52 [main ] TRACE BasicBinder - binding parameter [3] as [INTEGER] - 2<br />03 Dec 2013 16:02:52 [main ] TRACE BasicBinder - binding parameter [4] as [INTEGER] - 2147483647<br />03 Dec 2013 16:02:52 [main ] TRACE BasicBinder - binding parameter [5] as [INTEGER] - 2<br />{code}<br /><br /><br />below is the full test case for your reference<br /><br /><br /><br />{code:title=pom.xml|borderStyle=solid}<br /><?xml version="1.0" encoding="UTF-8"?><br /><project xmlns="http://maven.apache.org/POM/4.0.0"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><br /> <modelVersion>4.0.0</modelVersion><br /><br /> <groupId>TestHibernate</groupId><br /> <artifactId>TestHibernate</artifactId><br /> <version>1.0-SNAPSHOT</version><br /> <dependencies><br /> <dependency><br /> <groupId>com.googlecode.flyway</groupId><br /> <artifactId>flyway-core</artifactId><br /> <version>2.2.1</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>net.sourceforge.jtds</groupId><br /> <artifactId>jtds</artifactId><br /> <version>1.2.7</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.hibernate</groupId><br /> <artifactId>hibernate-entitymanager</artifactId><br /> <version>4.2.6.Final</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.hibernate</groupId><br /> <artifactId>hibernate-core</artifactId><br /> <version>4.2.6.Final</version><br /> </dependency><br /><br /><br /> <dependency><br /> <groupId>org.hibernate</groupId><br /> <artifactId>hibernate-envers</artifactId><br /> <version>4.2.6.Final</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-jdbc</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-orm</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework.data</groupId><br /> <artifactId>spring-data-jpa</artifactId><br /> <version>1.3.2.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-core</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-context</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-jms</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-tx</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-test</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-beans</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework.security</groupId><br /> <artifactId>spring-security-core</artifactId><br /> <version>3.1.4.RELEASE</version><br /> </dependency><br /> <dependency><br /> <groupId>org.springframework.security</groupId><br /> <artifactId>spring-security-web</artifactId><br /> <version>3.1.4.RELEASE</version><br /> </dependency><br /> <dependency><br /> <groupId>org.springframework.security</groupId><br /> <artifactId>spring-security-config</artifactId><br /> <version>3.1.4.RELEASE</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.springframework</groupId><br /> <artifactId>spring-aop</artifactId><br /> <version>3.2.3.RELEASE</version><br /> </dependency><br /> <dependency><br /> <groupId>org.testng</groupId><br /> <artifactId>testng</artifactId><br /> <version>6.8.5</version><br /> <scope>test</scope><br /> </dependency><br /> <dependency><br /> <groupId>log4j</groupId><br /> <artifactId>log4j</artifactId><br /> <version>1.2.17</version><br /> </dependency><br /><br /><br /> <dependency><br /> <groupId>org.slf4j</groupId><br /> <artifactId>slf4j-api</artifactId><br /> <version>1.7.5</version><br /> </dependency><br /><br /> <dependency><br /> <groupId>org.slf4j</groupId><br /> <artifactId>slf4j-log4j12</artifactId><br /> <version>1.7.5</version><br /> </dependency><br /> </dependencies><br /> <br /></project><br />{code}<br /><br />{code:title=Parent.java|borderStyle=solid}<br />package tpdrg;<br /><br />import org.hibernate.envers.Audited;<br /><br />import javax.persistence.*;<br />import java.util.List;<br /><br /><br />@Entity<br />@Audited<br />public class Parent {<br /> private String name;<br /><br /> @Id<br /> public String getName() {<br /> return name;<br /> }<br /><br /> public void setName(String name) {<br /> this.name = name;<br /> }<br /><br /> private List<Child> child;<br /><br /> @OneToMany(cascade = CascadeType.ALL,mappedBy = "parent",orphanRemoval = true)<br /> public List<Child> getChild() {<br /> return child;<br /> }<br /><br /> public void setChild(List<Child> child) {<br /> this.child = child;<br /> }<br />}<br />{code}<br /><br /><br />{code:title=Child.java|borderStyle=solid}<br />package tpdrg;<br /><br />import org.hibernate.envers.Audited;<br /><br />import javax.persistence.Entity;<br />import javax.persistence.Id;<br />import javax.persistence.ManyToOne;<br /><br />@Entity<br />@Audited<br />public class Child {<br /> private String name;<br /><br /><br /> @Id<br /> public String getName() {<br /> return name;<br /> }<br /><br /> public void setName(String name) {<br /> this.name = name;<br /> }<br /><br /> private Parent parent;<br /><br /> @ManyToOne<br /> public Parent getParent() {<br /> return parent;<br /> }<br /><br /> public void setParent(Parent parent) {<br /> this.parent = parent;<br /> }<br />}<br /><br />{code}<br /><br /><br />{code:title=Test.java|borderStyle=solid}<br />package tpdrg;<br /><br />import org.hibernate.Session;<br />import org.hibernate.Transaction;<br />import org.hibernate.envers.AuditReader;<br />import org.hibernate.envers.AuditReaderFactory;<br />import org.springframework.beans.factory.annotation.Autowired;<br />import org.springframework.beans.factory.annotation.Qualifier;<br />import org.springframework.test.context.ContextConfiguration;<br />import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;<br />import org.testng.annotations.AfterMethod;<br />import org.testng.annotations.BeforeMethod;<br />import org.testng.annotations.Test;<br /><br />import java.util.ArrayList;<br />import java.util.List;<br /><br /><br />@Test<br />@ContextConfiguration(locations = "classpath*:spring-config.xml")<br />public class TEST extends AbstractTestNGSpringContextTests {<br /><br /> @Autowired<br /> @Qualifier("Deals")<br /> protected org.hibernate.SessionFactory sf;<br /><br /> Session session;<br /><br /> @BeforeMethod<br /> public void init() {<br /> session = sf.openSession();<br /> }<br /><br /> @AfterMethod<br /> public void close() {<br /> session.close();<br /> }<br /><br /><br /> @Test<br /> public void AddNew(){<br /> Parent p = new Parent();<br /> p.setName("Parent");<br /> ArrayList children = new ArrayList();<br /> for (int i = 0 ; i < 3 ;i++){<br /> Child c = new Child();<br /> c.setName("child "+i);<br /> c.setParent(p);<br /> children.add(c);<br /> }<br /> p.setChild(children);<br /> Transaction tx = session.getTransaction();<br /> tx.begin();<br /> session.saveOrUpdate(p);<br /> tx.commit();<br /> }<br /><br /> @Test(dependsOnMethods = {"AddNew"})<br /> public void Remove(){<br /><br /> Transaction tx = session.getTransaction();<br /> tx.begin();<br /> Parent p = (Parent)session.get(Parent.class,"Parent");<br /> session.delete(p);<br /> tx.commit();<br /> }<br /><br /> @Test(dependsOnMethods = {"Remove"})<br /> public void AuditReader(){<br /><br /> Transaction tx = session.getTransaction();<br /> tx.begin();<br /><br /><br /> AuditReader reader = AuditReaderFactory.get(session);<br /> Parent deletedObject = reader.find(Parent.class,Parent.class.getName(), "Parent", Integer.MAX_VALUE, true);<br /> List<Child> children = (List<Child>)deletedObject.getChild();<br /> assert children.size()>0:"Expect the result should not zero";<br /><br /> tx.commit();<br /> }<br /><br />{code}<br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;">{code:title=spring-config.java|borderStyle=solid}<br /><?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://www.springframework.org/schema/beans"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xmlns:context="http://www.springframework.org/schema/context"<br /> xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"<br /> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"><br /><br /><br /><br /><br /><br /><br /><br /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><br /> <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/><br /> <property name="url" value="jdbc:jtds:sqlserver://topdragon.dyndns.org:14/TTNX21"/><br /> <property name="username" value="sa"/><br /> <property name="password" value="kplus12345"/><br /> </bean><br /><br /><br /> <bean id="txDeal" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><br /> <property name="sessionFactory" ref="Deals"/><br /><br /> </bean><br /><br /><br /> <bean id="Deals" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><br /> <property name="dataSource" ref="dataSource"/><br /><br /> <property name="hibernateProperties"><br /> <props><br /><br /> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop><br /> <prop key="hibernate.format_sql">true</prop><br /> <prop key="hibernate.show_sql">true</prop><br /> <prop key="hibernate.use_sql_comments">true</prop><br /> <prop key="hibernate.hbm2ddl.auto">update</prop><br /><br /> <prop key="hibernate.autoReconnect">true</prop><br /><br /><br /> <prop key="org.hibernate.envers.store_data_at_delete">true</prop><br /><br /> </props><br /><br /> </property><br /><br /><br /> <property name="packagesToScan"><br /> <list><br /> <value>tpdrg</value><br /><br /> </list><br /> </property><br /><br /><br /> </bean><br /><br /><br /></beans><br />{code}<br /></span>
</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-8057#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="https://hibernate.atlassian.net/images/mail/comment-icon.png" 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-8057#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">
</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.2-OD-03#6206-<span title="14444503aa87c48a61ab99005f20a349f3a79824" data-commit-id="14444503aa87c48a61ab99005f20a349f3a79824}">sha1:1444450</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="https://hibernate.atlassian.net/images/mail/footer-desktop-logo.png" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>