Skip to content

Commit 21c911e

Browse files
committed
HHH-19369 Test and fix CCE of AccessOptimizer foreign package bridge
1 parent d2d2186 commit 21c911e

File tree

4 files changed

+92
-1
lines changed

4 files changed

+92
-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
@@ -76,6 +76,7 @@ public class BytecodeProviderImpl implements BytecodeProvider {
7676

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

332-
final String className = foreignPackageClassInfo.clazz.getName() + "$" + OPTIMIZER_PROXY_NAMING_SUFFIX + encodeName( foreignPackageClassInfo.propertyNames, foreignPackageClassInfo.getters, foreignPackageClassInfo.setters );
333+
final String className = foreignPackageClassInfo.clazz.getName() + "$" + OPTIMIZER_PROXY_BRIDGE_NAMING_SUFFIX + encodeName( foreignPackageClassInfo.propertyNames, foreignPackageClassInfo.getters, foreignPackageClassInfo.setters );
333334
superClass = byteBuddyState.load(
334335
foreignPackageClassInfo.clazz,
335336
className,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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.orm.test.bytecode;
8+
9+
import org.hibernate.orm.test.bytecode.foreignpackage.ConcreteEntity;
10+
11+
import org.hibernate.testing.orm.junit.DomainModel;
12+
import org.hibernate.testing.orm.junit.Jira;
13+
import org.hibernate.testing.orm.junit.SessionFactory;
14+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
15+
import org.junit.jupiter.api.Test;
16+
17+
@SessionFactory
18+
@DomainModel(annotatedClasses = {
19+
ConcreteEntity.class,
20+
SuperclassEntity.class
21+
})
22+
@Jira("https://hibernate.atlassian.net/browse/HHH-19369")
23+
public class ForeignPackageSuperclassAccessorTest {
24+
25+
@Test
26+
public void test(SessionFactoryScope scope) {
27+
scope.inTransaction( session -> {
28+
session.find( SuperclassEntity.class, 1L );
29+
} );
30+
}
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.hibernate.orm.test.bytecode;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.Id;
5+
import jakarta.persistence.Inheritance;
6+
import jakarta.persistence.InheritanceType;
7+
8+
@Entity
9+
@Inheritance(strategy = InheritanceType.JOINED)
10+
public class SuperclassEntity {
11+
@Id
12+
protected long id;
13+
protected String name;
14+
15+
public long getId() {
16+
return id;
17+
}
18+
19+
public void setId(long id) {
20+
this.id = id;
21+
}
22+
23+
public String getName() {
24+
return name;
25+
}
26+
27+
public void setName(String name) {
28+
this.name = name;
29+
}
30+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.hibernate.orm.test.bytecode.foreignpackage;
2+
3+
import org.hibernate.orm.test.bytecode.SuperclassEntity;
4+
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.Id;
7+
8+
@Entity
9+
public class ConcreteEntity extends SuperclassEntity {
10+
@Id
11+
protected long id;
12+
protected String bname;
13+
14+
public long getId() {
15+
return id;
16+
}
17+
18+
public void setId(long id) {
19+
this.id = id;
20+
}
21+
22+
public String getBname() {
23+
return bname;
24+
}
25+
26+
public void setBname(String bname) {
27+
this.bname = bname;
28+
}
29+
}

0 commit comments

Comments
 (0)