Skip to content

Commit 1886ee4

Browse files
utsavNoovosoftmbellade
authored andcommitted
HHH-20229 Add reproducer test for EntityPrinter failure with @AnyKeyJavaClass(String)
Add a test reproducing a HibernateException thrown during logFlushResults when an @Any association uses @AnyKeyJavaClass(String.class).
1 parent 58eaac7 commit 1886ee4

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.any;
6+
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.GeneratedValue;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.JoinColumn;
12+
import org.hibernate.internal.CoreMessageLogger;
13+
import org.jboss.logging.Logger;
14+
import org.hibernate.annotations.Any;
15+
import org.hibernate.annotations.AnyDiscriminatorValue;
16+
import org.hibernate.annotations.AnyKeyJavaClass;
17+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
18+
import org.hibernate.testing.orm.junit.JiraKey;
19+
import org.hibernate.testing.orm.junit.Jpa;
20+
import org.junit.jupiter.api.Test;
21+
22+
import static org.hibernate.testing.logger.LogLevelContext.withLevel;
23+
24+
25+
/**
26+
* Test case reproducing an issue in EntityPrinter.logEntities during logFlushResults,
27+
* where a HibernateException is thrown while attempting to wrap an entity as a String.
28+
* <p>
29+
* The failure occurs when an @Any association uses a String identifier via @AnyKeyJavaClass(String.class),
30+
* leading Hibernate to incorrectly attempt a conversion using StringJavaType.
31+
*
32+
* @author Vincent Bouthinon
33+
* @author Utsav Mehta
34+
*/
35+
@Jpa(annotatedClasses = {AnyTypeFlushToLoggableStringTest.Book.class})
36+
@JiraKey("HHH-20229")
37+
class AnyTypeFlushToLoggableStringTest {
38+
39+
@Test
40+
void testLogEntityWithAnyKeyJavaClassAsString(EntityManagerFactoryScope scope) {
41+
try (
42+
var l1 = withLevel( CoreMessageLogger.NAME, Logger.Level.DEBUG );
43+
) {
44+
scope.inTransaction(
45+
entityManager -> {
46+
Book book = new Book();
47+
Book origin = new Book();
48+
book.setOrigin( origin );
49+
entityManager.persist( origin );
50+
entityManager.persist( book );
51+
entityManager.flush();
52+
entityManager.clear();
53+
}
54+
);
55+
}
56+
}
57+
58+
@Entity(name = "book")
59+
public static class Book {
60+
61+
@Id
62+
@GeneratedValue
63+
private String id;
64+
65+
@Any
66+
@AnyKeyJavaClass(String.class)
67+
@JoinColumn(name = "origin_id")
68+
@Column(name = "origin_type")
69+
@AnyDiscriminatorValue(discriminator = "BOOK", entity = Book.class)
70+
private Object origin;
71+
72+
public Object getOrigin() {
73+
return origin;
74+
}
75+
76+
public void setOrigin(Object origin) {
77+
this.origin = origin;
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)