Skip to content

Commit 39f01b1

Browse files
committed
HHH-18829 Test: Hibernate Processor - ID class generation by where needed
1 parent 26ed1e2 commit 39f01b1

File tree

5 files changed

+133
-0
lines changed

5 files changed

+133
-0
lines changed
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.processor.test.hhh18829;
6+
7+
import jakarta.persistence.MappedSuperclass;
8+
9+
@MappedSuperclass
10+
public class Address {
11+
String address;
12+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.hhh18829;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
10+
@Entity
11+
public class AnotherEmployee extends Address {
12+
String empName;
13+
14+
Integer empId;
15+
16+
@Id
17+
public String getEmpName() {
18+
return empName;
19+
}
20+
21+
public void setEmpName(String empName) {
22+
this.empName = empName;
23+
}
24+
25+
@Id
26+
public Integer getEmpId() {
27+
return empId;
28+
}
29+
30+
public void setEmpId(Integer empId) {
31+
this.empId = empId;
32+
}
33+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.hhh18829;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
10+
@Entity
11+
public class Employee extends Address {
12+
@Id
13+
String empName;
14+
@Id
15+
Integer empId;
16+
17+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.hhh18829;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.IdClass;
10+
11+
@Entity
12+
@IdClass(EmployeeWithIdClass.EmployeeId.class)
13+
public class EmployeeWithIdClass extends Address {
14+
@Id
15+
String empName;
16+
@Id
17+
Integer empId;
18+
19+
public record EmployeeId(String empName, Integer empId) {
20+
}
21+
22+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.hhh18829;
6+
7+
import org.hibernate.processor.test.util.CompilationTest;
8+
import org.hibernate.processor.test.util.TestForIssue;
9+
import org.hibernate.processor.test.util.TestUtil;
10+
import org.hibernate.processor.test.util.WithClasses;
11+
import org.junit.Test;
12+
13+
import java.util.Arrays;
14+
15+
import static org.hibernate.processor.test.util.TestUtil.getMetamodelClassFor;
16+
import static org.junit.jupiter.api.Assertions.assertTrue;
17+
18+
@TestForIssue(jiraKey = " HHH-18829")
19+
public class HHH18829Test extends CompilationTest {
20+
21+
@Test
22+
@WithClasses({Employee.class, AnotherEmployee.class, Address.class, EmployeeWithIdClass.class})
23+
@TestForIssue(jiraKey = "HHH-18829")
24+
public void test() {
25+
System.out.println( TestUtil.getMetaModelSourceAsString( Employee.class ) );
26+
System.out.println( TestUtil.getMetaModelSourceAsString( AnotherEmployee.class ) );
27+
System.out.println( TestUtil.getMetaModelSourceAsString( Address.class ) );
28+
System.out.println( TestUtil.getMetaModelSourceAsString( EmployeeWithIdClass.class ) );
29+
30+
checkIfIdClassIsGenerated( Employee.class );
31+
checkIfIdClassIsGenerated( AnotherEmployee.class );
32+
33+
final var clazz = getMetamodelClassFor( EmployeeWithIdClass.class );
34+
assertTrue( Arrays.stream( clazz.getClasses() ).map( Class::getSimpleName )
35+
.noneMatch( "Id"::equals ),
36+
"EmployeeWithIdClass_ should not have inner class Id" );
37+
}
38+
39+
private static void checkIfIdClassIsGenerated(Class<?> entityClass) {
40+
final var clazz = getMetamodelClassFor( entityClass );
41+
final var maybeIdClass = Arrays.stream( clazz.getClasses() )
42+
.filter( c -> c.getSimpleName().equals( "Id" ) ).findAny();
43+
assertTrue( maybeIdClass.isPresent(), () -> clazz.getSimpleName() + "_ should have inner class Id" );
44+
final Class<?> idClass = maybeIdClass.get();
45+
assertTrue( idClass.isRecord(), "Generated ID class should be a record" );
46+
final var recordComponents = idClass.getRecordComponents();
47+
// TODO : Check record components
48+
}
49+
}

0 commit comments

Comments
 (0)