From 8f463a752f72007b325a338ba99da754d0c27d1c Mon Sep 17 00:00:00 2001 From: brmeyer Date: Mon, 29 Oct 2012 11:36:16 -0400 Subject: [PATCH] HHH-5836 Mapping collection of entities with same name and notnull constraints from two different entities results in duplicate property mapping of Backref --- .../cfg/annotations/CollectionBinder.java | 2 +- .../hibernate/test/unidir/BackrefTest.java | 11 ++++-- .../org/hibernate/test/unidir/Child1.java | 29 +++++++++++++++ .../org/hibernate/test/unidir/Child2.java | 29 +++++++++++++++ .../org/hibernate/test/unidir/Parent1.java | 35 +++++++++++++++++++ 5 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/test/unidir/Child1.java create mode 100644 hibernate-core/src/test/java/org/hibernate/test/unidir/Child2.java create mode 100644 hibernate-core/src/test/java/org/hibernate/test/unidir/Parent1.java diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java b/hibernate-core/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java index 560d3ec935ae..b33812e64470 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java @@ -795,7 +795,7 @@ protected void bindOneToManySecondPass( String entityName = oneToMany.getReferencedEntityName(); PersistentClass referenced = mappings.getClass( entityName ); Backref prop = new Backref(); - prop.setName( '_' + fkJoinColumns[0].getPropertyName() + "Backref" ); + prop.setName( '_' + fkJoinColumns[0].getPropertyName() + '_' + fkJoinColumns[0].getLogicalColumnName() + "Backref" ); prop.setUpdateable( false ); prop.setSelectable( false ); prop.setCollectionRole( collection.getRole() ); diff --git a/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java b/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java index 756f4615a28b..666f23ede5d6 100755 --- a/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java @@ -38,12 +38,19 @@ */ public class BackrefTest extends BaseCoreFunctionalTestCase { @Override - public String[] getMappings() { + protected String[] getMappings() { return new String[] { "unidir/ParentChild.hbm.xml" }; } + + @Override + protected Class[] getAnnotatedClasses() { + // No test needed at this time. This was purely to test a + // validation issue from HHH-5836. + return new Class[] { Parent1.class, Child1.class, Child2.class }; + } @Override - public String getCacheConcurrencyStrategy() { + protected String getCacheConcurrencyStrategy() { return null; } diff --git a/hibernate-core/src/test/java/org/hibernate/test/unidir/Child1.java b/hibernate-core/src/test/java/org/hibernate/test/unidir/Child1.java new file mode 100644 index 000000000000..a6e0645d964a --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/unidir/Child1.java @@ -0,0 +1,29 @@ +package org.hibernate.test.unidir; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "CHILD1") +public class Child1 { + @Id + @Column(name = "ID") + private Long id; + + @OneToMany(fetch = FetchType.LAZY) + @JoinColumn(name = "CHILD1_ID", nullable = false) + private List parents = new ArrayList(); + + public Long getId() { + return this.id; + } + + public List getParents() { + return this.parents; + } + + public void setParents(List parents) { + this.parents = parents; + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/unidir/Child2.java b/hibernate-core/src/test/java/org/hibernate/test/unidir/Child2.java new file mode 100644 index 000000000000..89870948ea6b --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/unidir/Child2.java @@ -0,0 +1,29 @@ +package org.hibernate.test.unidir; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "CHILD2") +public class Child2 { + @Id + @Column(name = "ID") + private Long id; + + @OneToMany(fetch = FetchType.LAZY) + @JoinColumn(name = "CHILD2_ID", nullable = false) + private List parents = new ArrayList(); + + public Long getId() { + return this.id; + } + + public List getParents() { + return this.parents; + } + + public void setParents(List parents) { + this.parents = parents; + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/unidir/Parent1.java b/hibernate-core/src/test/java/org/hibernate/test/unidir/Parent1.java new file mode 100644 index 000000000000..fcc21838edb4 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/unidir/Parent1.java @@ -0,0 +1,35 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2012 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * 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, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * 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, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.test.unidir; + +import javax.persistence.*; + +@Entity +@Table(name = "PARENT1") +public class Parent1 { + @Id + @Column(name = "ID") + Long id; + + public Long getId() { + return this.id; + } +} \ No newline at end of file