Re-enabled additional test
This commit is contained in:
parent
7470138e0f
commit
99d4cdece6
|
@ -626,7 +626,7 @@ public class SingleTableEntityPersister extends AbstractEntityPersister {
|
|||
frag.addValues( fullDiscriminatorValues() );
|
||||
}
|
||||
|
||||
return " and " + frag.toFragmentString();
|
||||
return frag.toFragmentString();
|
||||
}
|
||||
|
||||
private boolean needsDiscriminator() {
|
||||
|
|
|
@ -197,12 +197,13 @@ public abstract class AbstractSqlAstWalker
|
|||
visitFromClause( fromClause );
|
||||
}
|
||||
|
||||
if ( querySpec.getWhereClauseRestrictions() != null && !querySpec.getWhereClauseRestrictions().isEmpty() ) {
|
||||
final Predicate whereClauseRestrictions = querySpec.getWhereClauseRestrictions();
|
||||
if ( whereClauseRestrictions != null && !whereClauseRestrictions.isEmpty() ) {
|
||||
appendSql( " where " );
|
||||
|
||||
clauseStack.push( Clause.WHERE );
|
||||
try {
|
||||
querySpec.getWhereClauseRestrictions().accept( this );
|
||||
whereClauseRestrictions.accept( this );
|
||||
}
|
||||
finally {
|
||||
clauseStack.pop();
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.orm.test.inheritance.discriminator;
|
||||
|
||||
import java.util.List;
|
||||
import javax.persistence.DiscriminatorColumn;
|
||||
import javax.persistence.DiscriminatorType;
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.orm.junit.DomainModel;
|
||||
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* @author Christian Beikov
|
||||
*/
|
||||
@DomainModel(
|
||||
annotatedClasses = {
|
||||
SingleTableRelationsTest.PostTable.class,
|
||||
SingleTableRelationsTest.Category.class,
|
||||
SingleTableRelationsTest.Post.class
|
||||
}
|
||||
)
|
||||
@SessionFactory
|
||||
@ServiceRegistry(settings = @ServiceRegistry.Setting(name = AvailableSettings.FORCE_DISCRIMINATOR_IN_SELECTS_BY_DEFAULT, value = "true"))
|
||||
public class SingleTableRelationsTest {
|
||||
|
||||
@BeforeEach
|
||||
public void createTestData(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
Category category7;
|
||||
session.persist( new Category( 1 ) );
|
||||
session.persist( new Category( 2 ) );
|
||||
session.persist( new Category( 3 ) );
|
||||
session.persist( new Category( 4 ) );
|
||||
session.persist( new Category( 5 ) );
|
||||
session.persist( new Category( 6 ) );
|
||||
session.persist( category7 = new Category( 7 ) );
|
||||
session.persist( new Post( 8, category7 ) );
|
||||
} );
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void tearDown(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery( "delete from Post" ).executeUpdate();
|
||||
session.createQuery( "delete from Category" ).executeUpdate();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-11375")
|
||||
public void testLazyInitialization(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
Category category7 = session.find( Category.class, 7 );
|
||||
// Must be empty because although Post and Category share the same column for their category relations,
|
||||
// the children must be based on entities that are of type Category
|
||||
assertTrue( category7.children.isEmpty() );
|
||||
} );
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-11375")
|
||||
public void testJoinFetch(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
Category category7 = session.createQuery(
|
||||
"SELECT c FROM " + Category.class.getName() + " c LEFT JOIN FETCH c.children WHERE c.id = :id",
|
||||
Category.class
|
||||
)
|
||||
.setParameter( "id", 7 )
|
||||
.getSingleResult();
|
||||
// Must be empty because although Post and Category share the same column for their category relations,
|
||||
// the children must be based on entities that are of type Category
|
||||
assertTrue( category7.children.isEmpty() );
|
||||
} );
|
||||
}
|
||||
|
||||
@Entity(name = "PostTable")
|
||||
@Table(name = "cp_post")
|
||||
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
|
||||
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
|
||||
public static class PostTable {
|
||||
|
||||
@Id
|
||||
protected Integer id;
|
||||
|
||||
public PostTable() {
|
||||
}
|
||||
|
||||
public PostTable(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity(name = "Category")
|
||||
@DiscriminatorValue("1")
|
||||
public static class Category extends PostTable {
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn
|
||||
protected Category category;
|
||||
|
||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
|
||||
protected List<Category> children;
|
||||
|
||||
public Category() {
|
||||
}
|
||||
|
||||
public Category(Integer id) {
|
||||
super( id );
|
||||
}
|
||||
|
||||
public Category(Integer id, Category category) {
|
||||
super( id );
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity(name = "Post")
|
||||
@DiscriminatorValue("2")
|
||||
public static class Post extends PostTable {
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn
|
||||
protected Category category;
|
||||
|
||||
public Post() {
|
||||
}
|
||||
|
||||
public Post(Integer id) {
|
||||
super( id );
|
||||
}
|
||||
|
||||
public Post(Integer id, Category category) {
|
||||
super( id );
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,159 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.test.inheritance.discriminator;
|
||||
|
||||
import java.util.List;
|
||||
import javax.persistence.DiscriminatorColumn;
|
||||
import javax.persistence.DiscriminatorType;
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
|
||||
/**
|
||||
* @author Christian Beikov
|
||||
*/
|
||||
public class SingleTableRelationsTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
return new Class<?>[] {PostTable.class, Category.class, Post.class};
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void configure(Configuration configuration) {
|
||||
configuration.setProperty( AvailableSettings.FORCE_DISCRIMINATOR_IN_SELECTS_BY_DEFAULT, "true" );
|
||||
}
|
||||
|
||||
private void createTestData() {
|
||||
doInHibernate( this::sessionFactory, session -> {
|
||||
Category category7;
|
||||
session.persist( new Category( 1 ) );
|
||||
session.persist( new Category( 2 ) );
|
||||
session.persist( new Category( 3 ) );
|
||||
session.persist( new Category( 4 ) );
|
||||
session.persist( new Category( 5 ) );
|
||||
session.persist( new Category( 6 ) );
|
||||
session.persist( category7 = new Category( 7 ) );
|
||||
session.persist( new Post( 8, category7 ) );
|
||||
} );
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-11375")
|
||||
public void testLazyInitialization() {
|
||||
createTestData();
|
||||
doInHibernate( this::sessionFactory, session -> {
|
||||
Category category7 = session.find( Category.class, 7 );
|
||||
// Must be empty because although Post and Category share the same column for their category relations,
|
||||
// the children must be based on entities that are of type Category
|
||||
Assert.assertTrue( category7.children.isEmpty() );
|
||||
} );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCleanupTestDataRequired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-11375")
|
||||
public void testJoinFetch() {
|
||||
createTestData();
|
||||
doInHibernate( this::sessionFactory, session -> {
|
||||
Category category7 = session.createQuery(
|
||||
"SELECT c FROM " + Category.class.getName() + " c LEFT JOIN FETCH c.children WHERE c.id = :id",
|
||||
Category.class
|
||||
)
|
||||
.setParameter( "id", 7 )
|
||||
.getSingleResult();
|
||||
// Must be empty because although Post and Category share the same column for their category relations,
|
||||
// the children must be based on entities that are of type Category
|
||||
Assert.assertTrue( category7.children.isEmpty() );
|
||||
} );
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name = "cp_post")
|
||||
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
|
||||
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
|
||||
public static class PostTable {
|
||||
|
||||
@Id
|
||||
protected Integer id;
|
||||
|
||||
public PostTable() {
|
||||
}
|
||||
|
||||
public PostTable(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
@DiscriminatorValue("1")
|
||||
public static class Category extends PostTable {
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn
|
||||
protected Category category;
|
||||
|
||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
|
||||
protected List<Category> children;
|
||||
|
||||
public Category() {
|
||||
}
|
||||
|
||||
public Category(Integer id) {
|
||||
super( id );
|
||||
}
|
||||
|
||||
public Category(Integer id, Category category) {
|
||||
super( id );
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
@DiscriminatorValue("2")
|
||||
public static class Post extends PostTable {
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn
|
||||
protected Category category;
|
||||
|
||||
public Post() {
|
||||
}
|
||||
|
||||
public Post(Integer id) {
|
||||
super( id );
|
||||
}
|
||||
|
||||
public Post(Integer id, Category category) {
|
||||
super( id );
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue