Skip to content

Commit de6d80a

Browse files
domtoupinvladmihalcea
authored andcommitted
HHH-10456: Report the class name were the invalid PrimaryKeyJoinColumn is present
1 parent 849c4d2 commit de6d80a

File tree

5 files changed

+82
-5
lines changed

5 files changed

+82
-5
lines changed

hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,7 @@ private static Ejb3JoinColumn[] makeInheritanceJoinColumns(
12421242
else {
12431243
if ( clazzToProcess.isAnnotationPresent( PrimaryKeyJoinColumns.class )
12441244
|| clazzToProcess.isAnnotationPresent( PrimaryKeyJoinColumn.class ) ) {
1245-
LOG.invalidPrimaryKeyJoinColumnAnnotation();
1245+
LOG.invalidPrimaryKeyJoinColumnAnnotation( clazzToProcess.getName() );
12461246
}
12471247
}
12481248
return inheritanceJoinedColumns;

hibernate-core/src/main/java/org/hibernate/internal/CoreMessageLogger.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,8 @@ void invalidJndiName(
445445
void invalidOnDeleteAnnotation(String entityName);
446446

447447
@LogMessage(level = WARN)
448-
@Message(value = "Root entity should not hold an PrimaryKeyJoinColum(s), will be ignored", id = 137)
449-
void invalidPrimaryKeyJoinColumnAnnotation();
448+
@Message(value = "Root entity should not hold an PrimaryKeyJoinColum(s), will be ignored: %s", id = 137)
449+
void invalidPrimaryKeyJoinColumnAnnotation(String className);
450450

451451
@LogMessage(level = WARN)
452452
@Message(value = "Mixing inheritance strategy in a entity hierarchy is not allowed, ignoring sub strategy in: %s",
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.cfg;
8+
9+
import static org.junit.Assert.assertTrue;
10+
11+
import javax.persistence.Entity;
12+
import javax.persistence.Id;
13+
import javax.persistence.PrimaryKeyJoinColumn;
14+
import org.hibernate.boot.Metadata;
15+
import org.hibernate.boot.MetadataSources;
16+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
17+
import org.hibernate.cfg.AnnotationBinder;
18+
import org.hibernate.internal.CoreMessageLogger;
19+
import org.hibernate.testing.TestForIssue;
20+
import org.hibernate.testing.logger.LoggerInspectionRule;
21+
import org.hibernate.testing.logger.Triggerable;
22+
import org.jboss.logging.Logger;
23+
import org.junit.Rule;
24+
import org.junit.Test;
25+
26+
/**
27+
* @author Dominique Toupin
28+
*/
29+
@TestForIssue(jiraKey = "HHH-10456")
30+
public class AnnotationBinderTest {
31+
32+
@Rule
33+
public LoggerInspectionRule logInspection = new LoggerInspectionRule(
34+
Logger.getMessageLogger( CoreMessageLogger.class, AnnotationBinder.class.getName() ) );
35+
36+
@Test
37+
public void testInvalidPrimaryKeyJoinColumnAnnotationMessageContainsClassName() throws Exception {
38+
39+
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000137" );
40+
41+
StandardServiceRegistryBuilder srb = new StandardServiceRegistryBuilder();
42+
43+
Metadata metadata = new MetadataSources( srb.build() )
44+
.addAnnotatedClass( InvalidPrimaryKeyJoinColumnAnnotationEntity.class )
45+
.buildMetadata();
46+
47+
assertTrue( "Expected warning HHH00137 but it wasn't triggered", triggerable.wasTriggered() );
48+
assertTrue( "Expected invalid class name in warning HHH00137 message but it does not apper to be present; got " + triggerable.triggerMessage(),
49+
triggerable.triggerMessage().matches( ".*\\b\\Q" + InvalidPrimaryKeyJoinColumnAnnotationEntity.class.getName() + "\\E\\b.*" ) );
50+
}
51+
52+
@Entity
53+
@PrimaryKeyJoinColumn
54+
public static class InvalidPrimaryKeyJoinColumnAnnotationEntity {
55+
56+
private String id;
57+
58+
@Id
59+
public String getId() {
60+
return id;
61+
}
62+
63+
public void setId(String id) {
64+
this.id = id;
65+
}
66+
}
67+
68+
}

hibernate-testing/src/main/java/org/hibernate/testing/logger/TriggerOnPrefixLogListener.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
package org.hibernate.testing.logger;
88

99
import java.util.concurrent.atomic.AtomicBoolean;
10+
import java.util.concurrent.atomic.AtomicReference;
1011

1112
import org.jboss.logging.Logger.Level;
1213

1314
final class TriggerOnPrefixLogListener implements LogListener, Triggerable {
1415

1516
private final String expectedPrefix;
1617
private final AtomicBoolean triggered = new AtomicBoolean( false );
18+
private final AtomicReference<String> triggerMessage = new AtomicReference<String>( null );
1719

1820
public TriggerOnPrefixLogListener(String expectedPrefix) {
1921
this.expectedPrefix = expectedPrefix;
@@ -23,9 +25,15 @@ public TriggerOnPrefixLogListener(String expectedPrefix) {
2325
public void loggedEvent(Level level, String renderedMessage, Throwable thrown) {
2426
if ( renderedMessage != null && renderedMessage.startsWith( expectedPrefix ) ) {
2527
triggered.set( true );
28+
triggerMessage.set(renderedMessage);
2629
}
2730
}
2831

32+
@Override
33+
public String triggerMessage() {
34+
return triggerMessage.get();
35+
}
36+
2937
@Override
3038
public boolean wasTriggered() {
3139
return triggered.get();
@@ -34,6 +42,6 @@ public boolean wasTriggered() {
3442
@Override
3543
public void reset() {
3644
triggered.set( false );
45+
triggerMessage.set(null);
3746
}
38-
3947
}

hibernate-testing/src/main/java/org/hibernate/testing/logger/Triggerable.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88

99
public interface Triggerable {
1010

11+
String triggerMessage();
12+
1113
boolean wasTriggered();
1214

1315
void reset();
14-
1516
}

0 commit comments

Comments
 (0)