diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/Column.java b/hibernate-core/src/main/java/org/hibernate/mapping/Column.java index 789dfa77b9c0..66763af013e2 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/Column.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/Column.java @@ -84,10 +84,9 @@ public String getName() { return name; } public void setName(String name) { - /* Envers passes 'name' parameter wrapped with '`' signs if quotation required. Set 'quoted' property accordingly. */ if ( name.charAt(0)=='`' || - Dialect.QUOTE.indexOf( name.charAt(0) ) > -1 + Dialect.QUOTE.indexOf( name.charAt(0) ) > -1 //TODO: deprecated, remove eventually ) { quoted=true; this.name=name.substring( 1, name.length()-1 ); diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/BasicNaming.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/BasicNaming.java index 69819e19352e..01d5d5d3a7a6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/BasicNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/BasicNaming.java @@ -40,7 +40,6 @@ /** * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ public class BasicNaming extends AbstractEntityTest { private Integer id1; @@ -119,18 +118,4 @@ public void testTableName() { getCfg().getClassMapping("org.hibernate.envers.test.integration.naming.NamingTestEntity1_AUD") .getTable().getName()); } - - @Test - public void testEscapeEntityField() { - Table table = getCfg().getClassMapping("org.hibernate.envers.test.integration.naming.NamingTestEntity1_AUD").getTable(); - Iterator columnIterator = table.getColumnIterator(); - while (columnIterator.hasNext()) { - Column column = columnIterator.next(); - if ("nte_number#".equals(column.getName())) { - assert column.isQuoted(); - return; - } - } - assert false; - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/NamingTestEntity1.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/NamingTestEntity1.java index e1e299978b08..1fed3322a6b6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/NamingTestEntity1.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/NamingTestEntity1.java @@ -34,7 +34,6 @@ /** * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @Entity @Table(name="naming_test_entity_1") @@ -49,10 +48,6 @@ public class NamingTestEntity1 { @Audited private String data; - @Column(name = "`nte_number#`") - @Audited - private Integer number; - public NamingTestEntity1() { } @@ -65,12 +60,6 @@ public NamingTestEntity1(Integer id, String data) { this.data = data; } - public NamingTestEntity1(Integer id, String data, Integer number) { - this.id = id; - this.data = data; - this.number = number; - } - public Integer getId() { return id; } @@ -87,14 +76,6 @@ public void setData(String data) { this.data = data; } - 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 NamingTestEntity1)) return false; @@ -102,7 +83,6 @@ public boolean equals(Object o) { NamingTestEntity1 that = (NamingTestEntity1) o; if (data != null ? !data.equals(that.data) : that.data != null) return false; - if (number != null ? !number.equals(that.number) : that.number != null) return false; if (id != null ? !id.equals(that.id) : that.id != null) return false; return true; @@ -112,7 +92,6 @@ public int hashCode() { int result; result = (id != null ? id.hashCode() : 0); result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); return result; } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsEntity.java new file mode 100644 index 000000000000..56f363599300 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsEntity.java @@ -0,0 +1,83 @@ +package org.hibernate.envers.test.integration.naming.quotation; + +import org.hibernate.envers.Audited; + +import javax.persistence.*; + +/** + * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) + */ +@Entity +public class QuotedFieldsEntity { + @Id + @GeneratedValue + @Column(name = "`id#`") + private Long id; + + @Column(name = "`#data1`") + @Audited + private String data1; + + @Column(name = "`#data2`") + @Audited + private Integer data2; + + public QuotedFieldsEntity() { + } + + public QuotedFieldsEntity(String data1, Integer data2) { + this.data1 = data1; + this.data2 = data2; + } + + public QuotedFieldsEntity(Long id, String data1, Integer data2) { + this.id = id; + this.data1 = data1; + this.data2 = data2; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getData1() { + return data1; + } + + public void setData1(String data1) { + this.data1 = data1; + } + + public Integer getData2() { + return data2; + } + + public void setData2(Integer data2) { + this.data2 = data2; + } + + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof QuotedFieldsEntity)) return false; + + QuotedFieldsEntity that = (QuotedFieldsEntity) o; + + if (id != null ? !id.equals(that.id) : that.id != null) return false; + if (data1 != null ? !data1.equals(that.data1) : that.data1 != null) return false; + if (data2 != null ? !data2.equals(that.data2) : that.data2 != null) return false; + + return true; + } + + public int hashCode() { + int result; + result = (id != null ? id.hashCode() : 0); + result = 31 * result + (data1 != null ? data1.hashCode() : 0); + result = 31 * result + (data2 != null ? data2.hashCode() : 0); + return result; + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsTest.java new file mode 100644 index 000000000000..b95cec295ef1 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/quotation/QuotedFieldsTest.java @@ -0,0 +1,104 @@ +package org.hibernate.envers.test.integration.naming.quotation; + +import org.hibernate.ejb.Ejb3Configuration; +import org.hibernate.envers.test.AbstractEntityTest; +import org.hibernate.envers.test.Priority; +import org.hibernate.mapping.Column; +import org.hibernate.mapping.Table; +import org.junit.Test; + +import javax.persistence.EntityManager; +import java.util.Arrays; +import java.util.Iterator; + +/** + * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) + */ +public class QuotedFieldsTest extends AbstractEntityTest { + private Long qfeId1 = null; + private Long qfeId2 = null; + + public void configure(Ejb3Configuration cfg) { + cfg.addAnnotatedClass(QuotedFieldsEntity.class); + } + + @Test + @Priority(10) + public void initData() { + QuotedFieldsEntity qfe1 = new QuotedFieldsEntity("data1", 1); + QuotedFieldsEntity qfe2 = new QuotedFieldsEntity("data2", 2); + + // Revision 1 + EntityManager em = getEntityManager(); + em.getTransaction().begin(); + em.persist(qfe1); + em.persist(qfe2); + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + qfe1 = em.find(QuotedFieldsEntity.class, qfe1.getId()); + qfe1.setData1("data1 changed"); + em.getTransaction().commit(); + + // Revision 3 + em.getTransaction().begin(); + qfe2 = em.find(QuotedFieldsEntity.class, qfe2.getId()); + qfe2.setData2(3); + em.getTransaction().commit(); + + qfeId1 = qfe1.getId(); + qfeId2 = qfe2.getId(); + } + + @Test + public void testRevisionsCounts() { + assert Arrays.asList(1, 2).equals(getAuditReader().getRevisions(QuotedFieldsEntity.class, qfeId1)); + assert Arrays.asList(1, 3).equals(getAuditReader().getRevisions(QuotedFieldsEntity.class, qfeId2)); + } + + @Test + public void testHistoryOfId1() { + QuotedFieldsEntity ver1 = new QuotedFieldsEntity(qfeId1, "data2", 1); + QuotedFieldsEntity ver2 = new QuotedFieldsEntity(qfeId1, "data1 changed", 1); + + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId1, 1).equals(ver1); + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId1, 2).equals(ver2); + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId1, 3).equals(ver2); + } + + @Test + public void testHistoryOfId2() { + QuotedFieldsEntity ver1 = new QuotedFieldsEntity(qfeId2, "data2", 2); + QuotedFieldsEntity ver2 = new QuotedFieldsEntity(qfeId2, "data2", 3); + + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId2, 1).equals(ver1); + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId2, 2).equals(ver1); + assert getAuditReader().find(QuotedFieldsEntity.class, qfeId2, 3).equals(ver2); + } + + @Test + public void testEscapeEntityField() { + Table table = getCfg().getClassMapping("org.hibernate.envers.test.integration.naming.quotation.QuotedFieldsEntity_AUD").getTable(); + Column column1 = getColumnByName(table, "id#"); + Column column2 = getColumnByName(table, "#data1"); + Column column3 = getColumnByName(table, "#data2"); + assert column1 != null; + assert column2 != null; + assert column3 != null; + assert column1.isQuoted(); + assert column2.isQuoted(); + assert column3.isQuoted(); + } + + private Column getColumnByName(Table table, String columnName) { + Iterator columnIterator = table.getColumnIterator(); + while (columnIterator.hasNext()) { + Column column = columnIterator.next(); + if (columnName.equals(column.getName())) { + return column; + } + } + return null; + } +}