[hibernate-commits] Hibernate SVN: r18120 - in core/trunk/envers/src: test/java/org/hibernate/envers/test/entities and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Dec 3 05:23:16 EST 2009


Author: adamw
Date: 2009-12-03 05:23:16 -0500 (Thu, 03 Dec 2009)
New Revision: 18120

Added:
   core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/IntNoAutoIdTestEntity.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/manytomany/WhereJoinTableEntity.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/manytomany/BasicWhereJoinTable.java
Modified:
   core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/CollectionMetadataGenerator.java
Log:
HHH-4633:
- supporting where clauses on collections (e.g. @WhereJoinTable)
- test

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/CollectionMetadataGenerator.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/CollectionMetadataGenerator.java	2009-12-03 09:03:35 UTC (rev 18119)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/CollectionMetadataGenerator.java	2009-12-03 10:23:16 UTC (rev 18120)
@@ -260,8 +260,8 @@
 
             // Registering the generated name
             mainGenerator.getAuditEntityNameRegister().register(auditMiddleEntityName);
-
-            middleEntityXml = createMiddleEntityXml(auditMiddleTableName, auditMiddleEntityName);
+                        
+            middleEntityXml = createMiddleEntityXml(auditMiddleTableName, auditMiddleEntityName, propertyValue.getWhere());
         } else {
             middleEntityXml = null;
         }
@@ -480,7 +480,7 @@
         }
     }
 
-    private Element createMiddleEntityXml(String auditMiddleTableName, String auditMiddleEntityName) {
+    private Element createMiddleEntityXml(String auditMiddleTableName, String auditMiddleEntityName, String where) {
         String schema = mainGenerator.getSchema(propertyAuditingData.getJoinTable().schema(), propertyValue.getCollectionTable());
         String catalog = mainGenerator.getCatalog(propertyAuditingData.getJoinTable().catalog(), propertyValue.getCollectionTable());
 
@@ -488,6 +488,11 @@
                 new AuditTableData(auditMiddleEntityName, auditMiddleTableName, schema, catalog), null);
         Element middleEntityXmlId = middleEntityXml.addElement("composite-id");
 
+        // If there is a where clause on the relation, adding it to the middle entity.
+        if (where != null) {
+            middleEntityXml.addAttribute("where", where);
+        }
+
         middleEntityXmlId.addAttribute("name", mainGenerator.getVerEntCfg().getOriginalIdPropName());
 
         // Adding the revision number as a foreign key to the revision info entity to the composite id of the

Copied: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/IntNoAutoIdTestEntity.java (from rev 18113, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/IntTestEntity.java)
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/IntNoAutoIdTestEntity.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/IntNoAutoIdTestEntity.java	2009-12-03 10:23:16 UTC (rev 18120)
@@ -0,0 +1,93 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.envers.Audited;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+public class IntNoAutoIdTestEntity {
+    @Id
+    private Integer id;
+
+    @Audited
+    private Integer number;
+
+    public IntNoAutoIdTestEntity() {
+    }
+
+    public IntNoAutoIdTestEntity(Integer number, Integer id) {
+        this.id = id;
+        this.number = number;
+    }
+
+    public IntNoAutoIdTestEntity(Integer number) {
+        this.number = number;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof IntNoAutoIdTestEntity)) return false;
+
+        IntNoAutoIdTestEntity that = (IntNoAutoIdTestEntity) o;
+
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+        //noinspection RedundantIfStatement
+        if (number != null ? !number.equals(that.number) : that.number != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (id != null ? id.hashCode() : 0);
+        result = 31 * result + (number != null ? number.hashCode() : 0);
+        return result;
+    }
+
+    public String toString() {
+        return "INATE(id = " + id + ", number = " + number + ")";
+    }
+}
\ No newline at end of file

Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/manytomany/WhereJoinTableEntity.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/manytomany/WhereJoinTableEntity.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/manytomany/WhereJoinTableEntity.java	2009-12-03 10:23:16 UTC (rev 18120)
@@ -0,0 +1,96 @@
+package org.hibernate.envers.test.entities.manytomany;
+
+import org.hibernate.envers.Audited;
+import org.hibernate.envers.test.entities.IntNoAutoIdTestEntity;
+import org.hibernate.annotations.WhereJoinTable;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at Audited
+public class WhereJoinTableEntity {
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    private String data;
+
+    @ManyToMany
+    @JoinTable(
+            name = "wjte_ite_join",
+            joinColumns = @JoinColumn(name = "wjte_id"),
+            inverseJoinColumns = @JoinColumn(name = "ite_id")
+    )
+    @WhereJoinTable(clause = "ite_id < 20")
+    private List<IntNoAutoIdTestEntity> references1;
+
+    @ManyToMany
+    @JoinTable(
+            name = "wjte_ite_join",
+            joinColumns = @JoinColumn(name = "wjte_id"),
+            inverseJoinColumns = @JoinColumn(name = "ite_id")
+    )
+    @WhereJoinTable(clause = "ite_id >= 20")
+    private List<IntNoAutoIdTestEntity> references2;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public List<IntNoAutoIdTestEntity> getReferences1() {
+        return references1;
+    }
+
+    public void setReferences1(List<IntNoAutoIdTestEntity> references1) {
+        this.references1 = references1;
+    }
+
+    public List<IntNoAutoIdTestEntity> getReferences2() {
+        return references2;
+    }
+
+    public void setReferences2(List<IntNoAutoIdTestEntity> references2) {
+        this.references2 = references2;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        WhereJoinTableEntity that = (WhereJoinTableEntity) o;
+
+        if (data != null ? !data.equals(that.data) : that.data != null) return false;
+        //noinspection RedundantIfStatement
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = id != null ? id.hashCode() : 0;
+        result = 31 * result + (data != null ? data.hashCode() : 0);
+        return result;
+    }
+
+    public String toString() {
+        return "WJTE(id = " + id + ", data = " + data + ")";
+    }
+}

Copied: core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/manytomany/BasicWhereJoinTable.java (from rev 18113, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/manytomany/BasicList.java)
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/manytomany/BasicWhereJoinTable.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/manytomany/BasicWhereJoinTable.java	2009-12-03 10:23:16 UTC (rev 18120)
@@ -0,0 +1,186 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.manytomany;
+
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.IntNoAutoIdTestEntity;
+import org.hibernate.envers.test.entities.manytomany.WhereJoinTableEntity;
+import org.hibernate.envers.test.tools.TestTools;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicWhereJoinTable extends AbstractEntityTest {
+    private Integer ite1_1_id;
+    private Integer ite1_2_id;
+    private Integer ite2_1_id;
+    private Integer ite2_2_id;
+
+    private Integer wjte1_id;
+    private Integer wjte2_id;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(WhereJoinTableEntity.class);
+        cfg.addAnnotatedClass(IntNoAutoIdTestEntity.class);
+    }
+
+    @BeforeClass(dependsOnMethods = "init")
+    public void initData() {
+        EntityManager em = getEntityManager();
+
+        IntNoAutoIdTestEntity ite1_1 = new IntNoAutoIdTestEntity(1, 10);
+        IntNoAutoIdTestEntity ite1_2 = new IntNoAutoIdTestEntity(1, 11);
+        IntNoAutoIdTestEntity ite2_1 = new IntNoAutoIdTestEntity(2, 20);
+        IntNoAutoIdTestEntity ite2_2 = new IntNoAutoIdTestEntity(2, 21);
+
+        WhereJoinTableEntity wjte1 = new WhereJoinTableEntity();
+        wjte1.setData("wjte1");
+
+        WhereJoinTableEntity wjte2 = new WhereJoinTableEntity();
+        wjte1.setData("wjte2");
+
+        // Revision 1
+        em.getTransaction().begin();
+
+        em.persist(ite1_1);
+        em.persist(ite1_2);
+        em.persist(ite2_1);
+        em.persist(ite2_2);
+        em.persist(wjte1);
+        em.persist(wjte2);
+
+        em.getTransaction().commit();
+        em.clear();
+
+        // Revision 2 (wjte1: 1_1, 2_1)
+
+        em.getTransaction().begin();
+
+        wjte1 = em.find(WhereJoinTableEntity.class, wjte1.getId());
+
+        wjte1.getReferences1().add(ite1_1);
+        wjte1.getReferences2().add(ite2_1);
+
+        em.getTransaction().commit();
+        em.clear();
+
+        // Revision 3 (wjte1: 1_1, 2_1; wjte2: 1_1, 1_2)
+        em.getTransaction().begin();
+
+        wjte2 = em.find(WhereJoinTableEntity.class, wjte2.getId());
+
+        wjte2.getReferences1().add(ite1_1);
+        wjte2.getReferences1().add(ite1_2);
+
+        em.getTransaction().commit();
+        em.clear();
+
+        // Revision 4 (wjte1: 2_1; wjte2: 1_1, 1_2, 2_2)
+        em.getTransaction().begin();
+
+        wjte1 = em.find(WhereJoinTableEntity.class, wjte1.getId());
+        wjte2 = em.find(WhereJoinTableEntity.class, wjte2.getId());
+
+        wjte1.getReferences1().remove(ite1_1);
+        wjte2.getReferences2().add(ite2_2);
+
+        em.getTransaction().commit();
+        em.clear();
+
+        //
+
+        ite1_1_id = ite1_1.getId();
+        ite1_2_id = ite1_2.getId();
+        ite2_1_id = ite2_1.getId();
+        ite2_2_id = ite2_2.getId();
+
+        wjte1_id = wjte1.getId();
+        wjte2_id = wjte2.getId();
+    }
+
+    @Test
+    public void testRevisionsCounts() {
+        assertEquals(Arrays.asList(1, 2, 4), getAuditReader().getRevisions(WhereJoinTableEntity.class, wjte1_id));
+        assertEquals(Arrays.asList(1, 3, 4), getAuditReader().getRevisions(WhereJoinTableEntity.class, wjte2_id));
+
+        assertEquals(Arrays.asList(1), getAuditReader().getRevisions(IntNoAutoIdTestEntity.class, ite1_1_id));
+        assertEquals(Arrays.asList(1), getAuditReader().getRevisions(IntNoAutoIdTestEntity.class, ite1_2_id));
+        assertEquals(Arrays.asList(1), getAuditReader().getRevisions(IntNoAutoIdTestEntity.class, ite2_1_id));
+        assertEquals(Arrays.asList(1), getAuditReader().getRevisions(IntNoAutoIdTestEntity.class, ite2_2_id));
+    }
+
+    @Test
+    public void testHistoryOfWjte1() {
+        IntNoAutoIdTestEntity ite1_1 = getEntityManager().find(IntNoAutoIdTestEntity.class, ite1_1_id);
+        IntNoAutoIdTestEntity ite2_1 = getEntityManager().find(IntNoAutoIdTestEntity.class, ite2_1_id);
+
+        WhereJoinTableEntity rev1 = getAuditReader().find(WhereJoinTableEntity.class, wjte1_id, 1);
+        WhereJoinTableEntity rev2 = getAuditReader().find(WhereJoinTableEntity.class, wjte1_id, 2);
+        WhereJoinTableEntity rev3 = getAuditReader().find(WhereJoinTableEntity.class, wjte1_id, 3);
+        WhereJoinTableEntity rev4 = getAuditReader().find(WhereJoinTableEntity.class, wjte1_id, 4);
+
+        // Checking 1st list
+        assert TestTools.checkList(rev1.getReferences1());
+        assert TestTools.checkList(rev2.getReferences1(), ite1_1);
+        assert TestTools.checkList(rev3.getReferences1(), ite1_1);
+        assert TestTools.checkList(rev4.getReferences1());
+
+        // Checking 2nd list
+        assert TestTools.checkList(rev1.getReferences2());
+        assert TestTools.checkList(rev2.getReferences2(), ite2_1);
+        assert TestTools.checkList(rev3.getReferences2(), ite2_1);
+        assert TestTools.checkList(rev4.getReferences2(), ite2_1);
+    }
+
+    @Test
+    public void testHistoryOfWjte2() {
+        IntNoAutoIdTestEntity ite1_1 = getEntityManager().find(IntNoAutoIdTestEntity.class, ite1_1_id);
+        IntNoAutoIdTestEntity ite1_2 = getEntityManager().find(IntNoAutoIdTestEntity.class, ite1_2_id);
+        IntNoAutoIdTestEntity ite2_2 = getEntityManager().find(IntNoAutoIdTestEntity.class, ite2_2_id);
+
+        WhereJoinTableEntity rev1 = getAuditReader().find(WhereJoinTableEntity.class, wjte2_id, 1);
+        WhereJoinTableEntity rev2 = getAuditReader().find(WhereJoinTableEntity.class, wjte2_id, 2);
+        WhereJoinTableEntity rev3 = getAuditReader().find(WhereJoinTableEntity.class, wjte2_id, 3);
+        WhereJoinTableEntity rev4 = getAuditReader().find(WhereJoinTableEntity.class, wjte2_id, 4);
+
+        // Checking 1st list
+        assert TestTools.checkList(rev1.getReferences1());
+        assert TestTools.checkList(rev2.getReferences1());
+        assert TestTools.checkList(rev3.getReferences1(), ite1_1, ite1_2);
+        assert TestTools.checkList(rev4.getReferences1(), ite1_1, ite1_2);
+
+        // Checking 2nd list
+        assert TestTools.checkList(rev1.getReferences2());
+        assert TestTools.checkList(rev2.getReferences2());
+        assert TestTools.checkList(rev3.getReferences2());
+        assert TestTools.checkList(rev4.getReferences2(), ite2_2);
+    }
+}
\ No newline at end of file



More information about the hibernate-commits mailing list