Skip to content

Commit

Permalink
HHH-15944 Add test for issue
Browse files Browse the repository at this point in the history
  • Loading branch information
dreab8 authored and beikov committed Feb 6, 2023
1 parent b2be989 commit c49da77
Showing 1 changed file with 190 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
package org.hibernate.orm.test.polymorphic;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.TypedQuery;

@DomainModel(
annotatedClasses = {
PolymorphicQueriesWithJoinTest.Person.class,
PolymorphicQueriesWithJoinTest.Dog.class,
PolymorphicQueriesWithJoinTest.Cat.class
}
)
@SessionFactory
@TestForIssue(jiraKey = "HHH-15944")
public class PolymorphicQueriesWithJoinTest {

public static final Long PERSON_ID = 1l;

@BeforeAll
public void setUp(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
Person owner = new Person( PERSON_ID );

Cat cat = new Cat();
Dog dog = new Dog();

cat.addToOwners( owner );
dog.addToOwners( owner );

session.persist( owner );
session.persist( cat );
session.persist( dog );
}
);
}

@Test
public void testSelect(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
List<Animal> animals = session
.createQuery(
"SELECT an FROM org.hibernate.orm.test.polymorphic.PolymorphicQueriesWithJoinTest$Animal an",
Animal.class
)
.getResultList();

}
);
}

@Test
public void testSelectWithJoin(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
List<Person> owners = session
.createQuery(
"SELECT p FROM org.hibernate.orm.test.polymorphic.PolymorphicQueriesWithJoinTest$Animal an JOIN an.owners p",
Person.class
)
.getResultList();
}

);
}

@Test
public void testSelectWithFetchJoin(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
List<Animal> animals = session
.createQuery(
"SELECT an FROM org.hibernate.orm.test.polymorphic.PolymorphicQueriesWithJoinTest$Animal an JOIN FETCH an.owners p",
Animal.class
)
.getResultList();
}

);
}

@Test
public void testSelectWithWhereClause(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
Person owner = session.find( Person.class, PERSON_ID );
TypedQuery<Animal> query = session.createQuery(
"SELECT an FROM org.hibernate.orm.test.polymorphic.PolymorphicQueriesWithJoinTest$Animal an WHERE :owner = some elements(an.owners) ",
Animal.class
);
query.setParameter( "owner", owner );
List<Animal> animals = query.getResultList();
}

);
}

@Entity(name = "Person")
public static class Person {

@Id
private long id;

private String name;

public Person() {
}

public Person(long id) {
this.id = id;
}

public long getId() {
return this.id;
}
}


public interface Animal {
Set<Person> getOwners();

void addToOwners(Person person);
}

@Entity(name = "Cat")
public static class Cat implements Animal {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

private String name;

@ManyToMany
private Set<Person> owners = new HashSet<>();

@Override
public Set<Person> getOwners() {
return this.owners;
}

@Override
public void addToOwners(Person person) {
owners.add( person );
}

}


@Entity(name = "Dog")
public static class Dog implements Animal {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

private String name;

@ManyToMany
private Set<Person> owners = new HashSet<>();

@Override
public Set<Person> getOwners() {
return this.owners;
}

@Override
public void addToOwners(Person person) {
owners.add( person );
}
}
}

0 comments on commit c49da77

Please sign in to comment.