Skip to content

Commit 2236103

Browse files
committed
HHH-19369 Test and fix CCE of AccessOptimizer foreign package bridge
1 parent 5c1edfa commit 2236103

File tree

4 files changed

+98
-1
lines changed

4 files changed

+98
-1
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public class BytecodeProviderImpl implements BytecodeProvider {
7575

7676
private static final String INSTANTIATOR_PROXY_NAMING_SUFFIX = "HibernateInstantiator";
7777
private static final String OPTIMIZER_PROXY_NAMING_SUFFIX = "HibernateAccessOptimizer";
78+
private static final String OPTIMIZER_PROXY_BRIDGE_NAMING_SUFFIX = "HibernateAccessOptimizerBridge";
7879
private static final ElementMatcher.Junction<NamedElement> newInstanceMethodName = ElementMatchers.named(
7980
"newInstance" );
8081
private static final ElementMatcher.Junction<NamedElement> getPropertyValuesMethodName = ElementMatchers.named(
@@ -328,7 +329,7 @@ private Class<?> determineAccessOptimizerSuperClass(Class<?> clazz, String[] pro
328329
final ForeignPackageClassInfo foreignPackageClassInfo = foreignPackageClassInfos.get( i );
329330
final Class<?> newSuperClass = superClass;
330331

331-
final String className = foreignPackageClassInfo.clazz.getName() + "$" + OPTIMIZER_PROXY_NAMING_SUFFIX + encodeName( foreignPackageClassInfo.propertyNames, foreignPackageClassInfo.getters, foreignPackageClassInfo.setters );
332+
final String className = foreignPackageClassInfo.clazz.getName() + "$" + OPTIMIZER_PROXY_BRIDGE_NAMING_SUFFIX + encodeName( foreignPackageClassInfo.propertyNames, foreignPackageClassInfo.getters, foreignPackageClassInfo.setters );
332333
superClass = byteBuddyState.load(
333334
foreignPackageClassInfo.clazz,
334335
className,
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: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.bytecode.foreignpackage;
6+
7+
import org.hibernate.orm.test.bytecode.SuperclassEntity;
8+
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.Id;
11+
12+
@Entity
13+
public class ConcreteEntity extends SuperclassEntity {
14+
@Id
15+
protected long id;
16+
protected String bname;
17+
18+
public long getId() {
19+
return id;
20+
}
21+
22+
public void setId(long id) {
23+
this.id = id;
24+
}
25+
26+
public String getBname() {
27+
return bname;
28+
}
29+
30+
public void setBname(String bname) {
31+
this.bname = bname;
32+
}
33+
}

0 commit comments

Comments
 (0)