HHH-5836 Mapping collection of entities with same name and notnull

constraints from two different entities results in duplicate property
mapping of Backref
This commit is contained in:
brmeyer 2012-10-29 11:36:16 -04:00
parent cbe619f9ba
commit eae079d283
5 changed files with 103 additions and 3 deletions

View File

@ -795,7 +795,7 @@ public abstract class CollectionBinder {
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() );

View File

@ -38,12 +38,19 @@ import static org.junit.Assert.assertFalse;
*/
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;
}

View File

@ -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<Parent1> parents = new ArrayList<Parent1>();
public Long getId() {
return this.id;
}
public List<Parent1> getParents() {
return this.parents;
}
public void setParents(List<Parent1> parents) {
this.parents = parents;
}
}

View File

@ -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<Parent1> parents = new ArrayList<Parent1>();
public Long getId() {
return this.id;
}
public List<Parent1> getParents() {
return this.parents;
}
public void setParents(List<Parent1> parents) {
this.parents = parents;
}
}

View File

@ -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;
}
}