Skip to content

Commit f541032

Browse files
cigalygavinking
authored andcommitted
HHH-19549 Enclosing element must not change access type of embeddable annotated with @access
1 parent 9197fd3 commit f541032

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.embeddable;
6+
7+
import jakarta.persistence.Access;
8+
import jakarta.persistence.AccessType;
9+
import jakarta.persistence.Embeddable;
10+
import jakarta.persistence.Embedded;
11+
import jakarta.persistence.Entity;
12+
import jakarta.persistence.Id;
13+
import jakarta.persistence.MappedSuperclass;
14+
import jakarta.persistence.Transient;
15+
import org.hibernate.processor.test.util.CompilationTest;
16+
import org.hibernate.processor.test.util.TestUtil;
17+
import org.hibernate.processor.test.util.WithClasses;
18+
import org.junit.jupiter.api.Test;
19+
20+
import java.time.Instant;
21+
import java.time.LocalDateTime;
22+
import java.time.OffsetDateTime;
23+
import java.time.ZoneOffset;
24+
25+
import static org.hibernate.processor.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
26+
import static org.hibernate.processor.test.util.TestUtil.assertMetamodelClassGeneratedFor;
27+
28+
@CompilationTest
29+
public class ForcedAccessTypeTest {
30+
31+
@Test
32+
@WithClasses({MyEntity.class, DateAndTime.class, MySuperclass.class})
33+
public void testCorrectAccessTypeUsedForEmbeddable() {
34+
System.out.println( TestUtil.getMetaModelSourceAsString( MyEntity.class ) );
35+
assertMetamodelClassGeneratedFor( MyEntity.class );
36+
37+
assertMetamodelClassGeneratedFor( MySuperclass.class );
38+
assertAttributeTypeInMetaModelFor(
39+
MySuperclass.class,
40+
"name",
41+
String.class,
42+
"Missing attribute name of type java.lang.String"
43+
);
44+
45+
assertMetamodelClassGeneratedFor( DateAndTime.class );
46+
assertAttributeTypeInMetaModelFor(
47+
DateAndTime.class,
48+
"localDateTime",
49+
LocalDateTime.class,
50+
"Missing attribute localDateTime of type java.time.LocalDateTime"
51+
);
52+
assertAttributeTypeInMetaModelFor(
53+
DateAndTime.class,
54+
"offset",
55+
ZoneOffset.class,
56+
"Missing attribute offset of type java.time.ZoneOffset"
57+
);
58+
}
59+
60+
@Entity
61+
@Access(AccessType.FIELD)
62+
static class MyEntity extends MySuperclass {
63+
@Id
64+
Long id;
65+
66+
@Embedded
67+
DateAndTime dateAndTime;
68+
}
69+
70+
@MappedSuperclass
71+
@Access(AccessType.PROPERTY)
72+
static class MySuperclass {
73+
private String name;
74+
75+
public String getName() {
76+
return name;
77+
}
78+
79+
public void setName(String name) {
80+
this.name = name;
81+
}
82+
}
83+
84+
@Embeddable
85+
@Access(AccessType.PROPERTY)
86+
static class DateAndTime {
87+
88+
@Transient
89+
private OffsetDateTime dateTime;
90+
91+
public DateAndTime() {
92+
this.dateTime = OffsetDateTime.now();
93+
}
94+
95+
public DateAndTime(final OffsetDateTime dateTime) {
96+
this.dateTime = dateTime;
97+
}
98+
99+
public DateAndTime(final Instant localDateTime, final ZoneOffset offset) {
100+
this.dateTime = localDateTime.atOffset( offset );
101+
}
102+
103+
public LocalDateTime getLocalDateTime() {
104+
return dateTime.toLocalDateTime();
105+
}
106+
107+
public void setLocalDateTime(final LocalDateTime localDateTime) {
108+
this.dateTime = localDateTime.atOffset( this.dateTime.getOffset() );
109+
}
110+
111+
public ZoneOffset getOffset() {
112+
return dateTime.getOffset();
113+
}
114+
115+
public void setOffset(final ZoneOffset offset) {
116+
this.dateTime = dateTime.toLocalDateTime().atOffset( offset );
117+
}
118+
119+
@Transient
120+
public OffsetDateTime dateTime() {
121+
return dateTime;
122+
}
123+
}
124+
125+
}

0 commit comments

Comments
 (0)