add a second test for repeated table names in JOINED with discriminator inheritance
This commit is contained in:
parent
8162bd5152
commit
bedcc0386a
|
@ -0,0 +1,225 @@
|
|||
package org.hibernate.orm.test.inheritance.repeatedtable;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.DiscriminatorColumn;
|
||||
import jakarta.persistence.DiscriminatorValue;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Inheritance;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||
import jakarta.persistence.Table;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.annotations.DiscriminatorOptions;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static jakarta.persistence.CascadeType.ALL;
|
||||
import static jakarta.persistence.InheritanceType.JOINED;
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
import static junit.framework.TestCase.assertNotNull;
|
||||
import static junit.framework.TestCase.assertNull;
|
||||
import static junit.framework.TestCase.assertTrue;
|
||||
import static org.hibernate.cfg.AvailableSettings.FORMAT_SQL;
|
||||
import static org.hibernate.cfg.AvailableSettings.SHOW_SQL;
|
||||
|
||||
public class RepeatedSubclassTableTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
return new Class[]{
|
||||
DataType.class,
|
||||
ObjectType.class,
|
||||
SimpleType.class,
|
||||
Prop.class
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure(Configuration configuration) {
|
||||
super.configure(configuration);
|
||||
configuration.setProperty(SHOW_SQL, Boolean.toString(true));
|
||||
configuration.setProperty(FORMAT_SQL, Boolean.toString(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_append_properties() {
|
||||
Long id;
|
||||
Long sId;
|
||||
try (Session sess = openSession()) {
|
||||
Transaction tx = sess.beginTransaction();
|
||||
|
||||
SimpleType simpleType = new SimpleType();
|
||||
simpleType.setName("simple");
|
||||
simpleType.setCount(69);
|
||||
sess.persist(simpleType);
|
||||
sId = simpleType.getId();
|
||||
|
||||
ObjectType objectType = new ObjectType();
|
||||
objectType.setName("name");
|
||||
sess.persist(objectType);
|
||||
id = objectType.getId();
|
||||
|
||||
tx.commit();
|
||||
}
|
||||
|
||||
try (Session sess = openSession()) {
|
||||
Transaction tx = sess.beginTransaction();
|
||||
ObjectType objectType = sess.find(ObjectType.class, id);
|
||||
Prop property = new Prop();
|
||||
property.setName("Prop1");
|
||||
property.setObjectType(objectType);
|
||||
objectType.getProperties().add(property);
|
||||
tx.commit();
|
||||
}
|
||||
try (Session sess = openSession()) {
|
||||
Transaction tx = sess.beginTransaction();
|
||||
ObjectType objectType = sess.find(ObjectType.class, id);
|
||||
assertEquals(1, objectType.getProperties().size());
|
||||
tx.commit();
|
||||
}
|
||||
|
||||
try (Session sess = openSession()) {
|
||||
DataType dataType1 = sess.find(DataType.class, sId);
|
||||
assertTrue( dataType1 instanceof SimpleType );
|
||||
DataType dataType2 = sess.find(DataType.class, id);
|
||||
assertTrue( dataType2 instanceof ObjectType );
|
||||
}
|
||||
try (Session sess = openSession()) {
|
||||
SimpleType simpleType = sess.find(SimpleType.class, sId);
|
||||
assertNotNull( simpleType );
|
||||
SimpleType wrongType = sess.find(SimpleType.class, id);
|
||||
assertNull( wrongType );
|
||||
}
|
||||
|
||||
try (Session sess = openSession()) {
|
||||
assertEquals( 2, sess.createQuery("from RepeatedSubclassTableTest$DataType").getResultList().size() );
|
||||
assertEquals( 1, sess.createQuery("from RepeatedSubclassTableTest$ObjectType").getResultList().size() );
|
||||
assertEquals( 1, sess.createQuery("from RepeatedSubclassTableTest$SimpleType").getResultList().size() );
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name = "DATA_TYPE")
|
||||
@Inheritance(strategy = JOINED)
|
||||
@DiscriminatorColumn(name = "supertype_id")
|
||||
@DiscriminatorOptions(force = true)
|
||||
public static abstract class DataType {
|
||||
|
||||
private Long id;
|
||||
private String name;
|
||||
|
||||
@Id
|
||||
@Column(name = "ID")
|
||||
@GeneratedValue
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Column(name = "name")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Entity
|
||||
@DiscriminatorValue("8")
|
||||
@Table(name = "OBJ_TYPE")
|
||||
@PrimaryKeyJoinColumn(name = "TYPE_ID")
|
||||
public static class ObjectType extends DataType {
|
||||
|
||||
private String description;
|
||||
private List<Prop> properties;
|
||||
|
||||
@Column(name = "descr")
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@OneToMany(mappedBy = "objectType", cascade = ALL, orphanRemoval = true)
|
||||
public List<Prop> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(List<Prop> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name = "PROP")
|
||||
public static class Prop {
|
||||
|
||||
private Long id;
|
||||
private String name;
|
||||
private ObjectType objectType;
|
||||
|
||||
@Id
|
||||
@Column(name = "ID")
|
||||
@GeneratedValue
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Column(name = "name")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@JoinColumn(name = "OBJ_TYPE_ID")
|
||||
@ManyToOne
|
||||
public ObjectType getObjectType() {
|
||||
return objectType;
|
||||
}
|
||||
|
||||
public void setObjectType(ObjectType objectType) {
|
||||
this.objectType = objectType;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
@DiscriminatorValue("2")
|
||||
@Table(name = "OBJ_TYPE")
|
||||
@PrimaryKeyJoinColumn(name = "TYPE_ID")
|
||||
public static class SimpleType extends DataType {
|
||||
Integer count;
|
||||
|
||||
@Column(name = "counter")
|
||||
public Integer getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
public void setCount(Integer count) {
|
||||
this.count = count;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue