Skip to content

Commit 0c3e9f0

Browse files
committed
HHH-19195 Test case using classes described in https://in.relation.to/2024/07/12/embeddable-inheritance/
1 parent 0bc1dff commit 0c3e9f0

File tree

7 files changed

+133
-0
lines changed

7 files changed

+133
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import jakarta.persistence.DiscriminatorColumn;
8+
import jakarta.persistence.Embeddable;
9+
10+
@Embeddable
11+
@DiscriminatorColumn(name = "animal_type", length = 1)
12+
public class Animal {
13+
private int age;
14+
15+
private String name;
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import jakarta.persistence.Embeddable;
8+
9+
@Embeddable
10+
public class Cat extends Mammal {
11+
// [...]
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import jakarta.persistence.Embeddable;
8+
9+
@Embeddable
10+
public class Dog extends Mammal {
11+
// [...]
12+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import org.hibernate.testing.orm.junit.DomainModel;
8+
import org.hibernate.testing.orm.junit.SessionFactory;
9+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
10+
import org.junit.jupiter.api.Test;
11+
12+
import java.util.List;
13+
14+
import static org.junit.jupiter.api.Assertions.assertNotNull;
15+
16+
@DomainModel(
17+
annotatedClasses = {
18+
Animal.class,
19+
Cat.class,
20+
Dog.class,
21+
Fish.class,
22+
Mammal.class,
23+
Owner.class
24+
}
25+
)
26+
@SessionFactory
27+
public class EmbeddableInheritanceTest {
28+
29+
@Test
30+
void testCatByMother(SessionFactoryScope scope) {
31+
final List<Owner> owners = scope.fromSession(
32+
session ->
33+
session.createQuery( "select o from Owner o where treat(o.pet as Cat).mother = :mother",
34+
Owner.class )
35+
.setParameter( "mother", "Chloe" )
36+
.getResultList() );
37+
assertNotNull( owners );
38+
}
39+
40+
@Test
41+
void testCatMothers(SessionFactoryScope scope) {
42+
final List<String> owners = scope.fromSession(
43+
session ->
44+
session.createNamedQuery( "catMothers", String.class )
45+
.getResultList() );
46+
assertNotNull( owners );
47+
}
48+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import jakarta.persistence.Embeddable;
8+
9+
@Embeddable
10+
public class Fish extends Animal {
11+
private int fins;
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
import jakarta.persistence.Embeddable;
8+
9+
@Embeddable
10+
public class Mammal extends Animal {
11+
private String mother;
12+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.embeddable.discriminatorvalues;
6+
7+
8+
import jakarta.persistence.Embedded;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.NamedQuery;
12+
13+
@Entity
14+
@NamedQuery(name = "catMothers", query = "select treat(o.pet as Cat).mother from Owner o")
15+
public class Owner {
16+
@Id
17+
private Long id;
18+
19+
@Embedded
20+
private Animal pet;
21+
}

0 commit comments

Comments
 (0)