HHH-7915 test case and cleanup
This commit is contained in:
parent
7ef045ae2c
commit
9ee5392456
|
@ -22,11 +22,10 @@
|
|||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
package org.hibernate.mapping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.internal.util.collections.JoinedIterator;
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
//$Id$
|
||||
package org.hibernate.test.annotations.polymorphism;
|
||||
|
||||
public class Automobile {
|
||||
}
|
|
@ -2,10 +2,11 @@
|
|||
package org.hibernate.test.annotations.polymorphism;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
import org.hibernate.annotations.PolymorphismType;
|
||||
|
||||
|
@ -15,10 +16,27 @@ import org.hibernate.annotations.PolymorphismType;
|
|||
@Entity
|
||||
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
|
||||
@org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
|
||||
public class Car extends MovingThing {
|
||||
private Integer id;
|
||||
public class Car extends Automobile {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private long id;
|
||||
|
||||
private String model;
|
||||
|
||||
@ManyToOne
|
||||
// purposefully refer to a non-PK column (HHH-7915)
|
||||
@JoinColumn( referencedColumnName = "REGION_CODE")
|
||||
private MarketRegion marketRegion;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getModel() {
|
||||
return model;
|
||||
}
|
||||
|
@ -27,12 +45,11 @@ public class Car extends MovingThing {
|
|||
this.model = model;
|
||||
}
|
||||
|
||||
@Id @GeneratedValue(strategy = GenerationType.TABLE )
|
||||
public Integer getId() {
|
||||
return id;
|
||||
public MarketRegion getMarketRegion() {
|
||||
return marketRegion;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
public void setMarketRegion(MarketRegion marketRegion) {
|
||||
this.marketRegion = marketRegion;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2013 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.annotations.polymorphism;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
|
||||
/**
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
@Entity
|
||||
public class MarketRegion {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private long id;
|
||||
|
||||
@Column(name = "REGION_CODE")
|
||||
private String regionCode;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getRegionCode() {
|
||||
return regionCode;
|
||||
}
|
||||
|
||||
public void setRegionCode(String regionCode) {
|
||||
this.regionCode = regionCode;
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
//$Id$
|
||||
package org.hibernate.test.annotations.polymorphism;
|
||||
|
||||
|
||||
/**
|
||||
* @author Emmanuel Bernard
|
||||
*/
|
||||
public class MovingThing {
|
||||
}
|
|
@ -27,14 +27,17 @@ import org.junit.Test;
|
|||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Emmanuel Bernard
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class PolymorphismTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Test
|
||||
public void testPolymorphism() throws Exception {
|
||||
Car car = new Car();
|
||||
|
@ -47,7 +50,42 @@ public class PolymorphismTest extends BaseCoreFunctionalTestCase {
|
|||
s.persist( car2 );
|
||||
s.flush();
|
||||
assertEquals( 2, s.createQuery( "select car from Car car").list().size() );
|
||||
assertEquals( 0, s.createQuery( "select count(m) from " + MovingThing.class.getName() + " m").list().size() );
|
||||
assertEquals( 0, s.createQuery( "select count(m) from " + Automobile.class.getName() + " m").list().size() );
|
||||
tx.rollback();
|
||||
s.close();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-7915")
|
||||
public void testNonPkInheritedFk() throws Exception {
|
||||
MarketRegion region1 = new MarketRegion();
|
||||
region1.setRegionCode( "US" );
|
||||
MarketRegion region2 = new MarketRegion();
|
||||
region2.setRegionCode( "EU" );
|
||||
|
||||
Car car = new Car();
|
||||
car.setModel( "SUV" );
|
||||
car.setMarketRegion( region1 );
|
||||
|
||||
SportCar car2 = new SportCar();
|
||||
car2.setModel( "350Z" );
|
||||
car2.setMarketRegion( region2 );
|
||||
|
||||
Session s = openSession();
|
||||
Transaction tx = s.beginTransaction();
|
||||
s.persist( region1 );
|
||||
s.persist( region2 );
|
||||
s.persist( car );
|
||||
s.persist( car2 );
|
||||
|
||||
s.flush();
|
||||
|
||||
assertEquals( 1, s.createQuery( "select car from Car car where car.marketRegion.regionCode='US'")
|
||||
.list().size() );
|
||||
assertEquals( 1, s.createQuery( "select car from SportCar car where car.marketRegion.regionCode='EU'")
|
||||
.list().size() );
|
||||
|
||||
tx.rollback();
|
||||
s.close();
|
||||
|
||||
|
@ -57,7 +95,8 @@ public class PolymorphismTest extends BaseCoreFunctionalTestCase {
|
|||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
Car.class,
|
||||
SportCar.class
|
||||
SportCar.class,
|
||||
MarketRegion.class
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue