HHH-11182 - Add test for issue

This commit is contained in:
Gail Badner 2016-10-19 00:00:59 -07:00
parent 3b196fb2e1
commit 38379a537a
1 changed files with 143 additions and 0 deletions

View File

@ -0,0 +1,143 @@
/*
* 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.hql.joinedSubclass;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
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.junit.Test;
import org.hibernate.Session;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
/**
* @author Stephen Fikes
* @author Gail Badner
*/
public class JoinedSubclassSubQueryTest extends BaseCoreFunctionalTestCase {
@Test
@TestForIssue(jiraKey = "HHH-11182")
public void testSubQueryConstraintPropertyInSuperclassTable() {
Session s = openSession();
try {
s.getTransaction().begin();
// employee.firstName is in Person table (not Employee)
String queryHQL = "from InvestmentCompany investmentCompany "
+ "where exists "
+ "(select employee "
+ "from investmentCompany.employees as employee "
+ " where employee.firstName = 'Joe')";
s.createQuery( queryHQL ).uniqueResult();
s.getTransaction().commit();
}
catch (Exception e) {
if ( s.getTransaction() != null && s.getTransaction().isActive() ) {
s.getTransaction().rollback();
}
throw e;
}
finally {
s.close();
}
}
@Test
@TestForIssue(jiraKey = "HHH-11182")
public void testSubQueryConstraintPropertyInEntityTable() {
Session s = openSession();
try {
s.getTransaction().begin();
// employee.employeeNumber is in Employee table
String queryHQL = "from InvestmentCompany investmentCompany "
+ "where exists "
+ "(select employee "
+ "from investmentCompany.employees as employee "
+ " where employee.employeeNumber = 666 )";
s.createQuery( queryHQL ).uniqueResult();
}
catch (Exception e) {
if ( s.getTransaction() != null && s.getTransaction().isActive() ) {
s.getTransaction().rollback();
}
throw e;
}
finally {
s.close();
}
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
InvestmentCompany.class,
Person.class,
Employee.class
};
}
@Entity(name = "InvestmentCompany")
@Table
public static class InvestmentCompany {
@Id
@GeneratedValue
@Column
private Long id;
@Basic(optional = false)
@Column(nullable = false, length = 255)
private String fullName;
@Basic(optional = false)
@Column(nullable = false, length = 16)
private String shortName;
@OneToMany(mappedBy = "company")
List<Employee> employees;
}
@Entity(name = "Person")
@Inheritance(strategy = InheritanceType.JOINED)
public static abstract class Person {
@Id
@GeneratedValue
@Column
private Long id;
@Basic(optional = false)
@Column(nullable = false)
private String firstName;
}
@Entity(name = "Employee")
public static class Employee extends Person {
@Id
@GeneratedValue
@Column
private Long id;
private int employeeNumber;
@ManyToOne(optional = false)
@JoinColumn(nullable = false)
private InvestmentCompany company;
}
}