Skip to content

Commit f1687ad

Browse files
beikovmbellade
authored andcommitted
HHH-19372 HHH-19369 Test and fix CCE and IAE with access optimizer and inheritance
Backport of hibernate#10192
1 parent ad10bb4 commit f1687ad

21 files changed

+823
-140
lines changed

hibernate-core/src/main/java/org/hibernate/bytecode/internal/bytebuddy/BytecodeProviderImpl.java

Lines changed: 181 additions & 140 deletions
Large diffs are not rendered by default.

hibernate-core/src/main/java/org/hibernate/property/access/spi/GetterFieldImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public GetterFieldImpl(Class<?> containerClass, String propertyName, Field field
4040
this.getterMethod = ReflectHelper.findGetterMethodForFieldAccess( field, propertyName );
4141
}
4242

43+
public Field getField() {
44+
return field;
45+
}
46+
4347
@Override
4448
public Object get(Object owner) {
4549
try {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode;
6+
7+
import org.hibernate.orm.test.bytecode.foreignpackage.ConcreteEntity;
8+
9+
import org.hibernate.testing.orm.junit.DomainModel;
10+
import org.hibernate.testing.orm.junit.Jira;
11+
import org.hibernate.testing.orm.junit.SessionFactory;
12+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
13+
import org.junit.jupiter.api.Test;
14+
15+
@SessionFactory
16+
@DomainModel(annotatedClasses = {
17+
ConcreteEntity.class,
18+
SuperclassEntity.class
19+
})
20+
@Jira("https://hibernate.atlassian.net/browse/HHH-19369")
21+
public class ForeignPackageSuperclassAccessorTest {
22+
23+
@Test
24+
public void test(SessionFactoryScope scope) {
25+
scope.inTransaction( session -> {
26+
session.find( SuperclassEntity.class, 1L );
27+
} );
28+
}
29+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.Inheritance;
10+
import jakarta.persistence.InheritanceType;
11+
12+
@Entity
13+
@Inheritance(strategy = InheritanceType.JOINED)
14+
public class SuperclassEntity {
15+
@Id
16+
protected long id;
17+
protected String name;
18+
19+
public long getId() {
20+
return id;
21+
}
22+
23+
public void setId(long id) {
24+
this.id = id;
25+
}
26+
27+
public String getName() {
28+
return name;
29+
}
30+
31+
public void setName(String name) {
32+
this.name = name;
33+
}
34+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Inheritance;
9+
import jakarta.persistence.InheritanceType;
10+
import org.hibernate.orm.test.bytecode.enhancement.optimizer.parent.Ancestor;
11+
12+
@Entity(name = "AncestorEntity")
13+
@Inheritance(strategy = InheritanceType.JOINED)
14+
public class AncestorEntity extends Ancestor {
15+
16+
private Long id;
17+
18+
private String field;
19+
20+
public Long getId() {
21+
return id;
22+
}
23+
24+
public void setId(Long id) {
25+
this.id = id;
26+
}
27+
28+
public String getField() {
29+
return field;
30+
}
31+
32+
public void setField(String field) {
33+
this.field = field;
34+
}
35+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
9+
@Entity(name = "ChildEntity3")
10+
public class ChildEntity3 extends AncestorEntity {
11+
private String childField;
12+
13+
public String getChildField() {
14+
return childField;
15+
}
16+
17+
public void setChieldField(String childField) {
18+
this.childField = childField;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
9+
@Entity(name = "ChildEntity4")
10+
public class ChildEntity4 extends AncestorEntity {
11+
private String childField;
12+
13+
public String getChildField() {
14+
return childField;
15+
}
16+
17+
public void setChieldField(String childField) {
18+
this.childField = childField;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
9+
@Entity(name = "ChildEntity5")
10+
public class ChildEntity5 extends AncestorEntity {
11+
private String childField;
12+
13+
public String getChildField() {
14+
return childField;
15+
}
16+
17+
public void setChieldField(String childField) {
18+
this.childField = childField;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
9+
@Entity(name = "ChildEntity6")
10+
public class ChildEntity6 extends AncestorEntity {
11+
private String childField;
12+
13+
public String getChildField() {
14+
return childField;
15+
}
16+
17+
public void setChieldField(String childField) {
18+
this.childField = childField;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.enhancement.optimizer;
6+
7+
import jakarta.persistence.Entity;
8+
9+
@Entity(name = "ChildEntity7")
10+
public class ChildEntity7 extends AncestorEntity {
11+
private String childField;
12+
13+
public String getChildField() {
14+
return childField;
15+
}
16+
17+
public void setChildField(String childField) {
18+
this.childField = childField;
19+
}
20+
}

0 commit comments

Comments
 (0)