[JIRA] (HHH-16412) java.lang.ClassCircularityError after upgrading to 6.2.0.Final
by Cédric Tabin (JIRA)
Cédric Tabin ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... ) *created* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiNjRhZGVlYTg2... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16412?atlOrigin=eyJpIjoiNjRhZG... ) HHH-16412 ( https://hibernate.atlassian.net/browse/HHH-16412?atlOrigin=eyJpIjoiNjRhZG... ) java.lang.ClassCircularityError after upgrading to 6.2.0.Final ( https://hibernate.atlassian.net/browse/HHH-16412?atlOrigin=eyJpIjoiNjRhZG... )
Issue Type: Bug Affects Versions: 6.2.0 Assignee: Unassigned Components: bytecode-enhancement Created: 31/Mar/2023 03:03 AM Environment: Payara-embedded-all 6.2023.1 with enhanced entities maven-plugin 6.2.0.Final. Priority: Major Reporter: Cédric Tabin ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... )
Hello,
Our entities are enhanced at compile-time through the maven plugin. When the application is deployed, we get the following error:
SEVERE: Exception during lifecycle processing
java.lang.ClassCircularityError: org/hibernate/bytecode/enhance/spi/EnhancementContextWrapper
at org.hibernate.jpa.internal.enhance.EnhancingClassTransformerImpl.transform(EnhancingClassTransformerImpl.java:50)
at org.glassfish.persistence.jpa.ServerProviderContainerContractInfo$1.transform(ServerProviderContainerContractInfo.java:101)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:734)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at com.sun.enterprise.loader.CurrentBeforeParentClassLoader.loadClass(CurrentBeforeParentClassLoader.java:83)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:166)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1380)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1451)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:142)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:207)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:114)
at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:267)
at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:571)
at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:286)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:183)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:1197)
at org.glassfish.javaee.full.deployment.EarDeployer.prepareBundle(EarDeployer.java:301)
at org.glassfish.javaee.full.deployment.EarDeployer.lambda$prepare$0(EarDeployer.java:164)
at org.glassfish.javaee.full.deployment.EarDeployer.doOnBundles(EarDeployer.java:221)
at org.glassfish.javaee.full.deployment.EarDeployer.doOnAllTypedBundles(EarDeployer.java:233)
at org.glassfish.javaee.full.deployment.EarDeployer.doOnAllBundles(EarDeployer.java:259)
at org.glassfish.javaee.full.deployment.EarDeployer.prepare(EarDeployer.java:162)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:1197)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:511)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:612)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1869)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:131)
...
The only thing we changed was the version of Hibernate (from 6.1.7 which worked fine to 6.2.0).
Also, we denoted a strange behavior of the enhancer, because after enhancement, the entities field became public which is unattended.
Our entities are very basic (only private annotated fields an public getters/setters), there are only some inheritance of generic fields:
@Entity
@Table(name = "mytable" )
public class MyTable extends AbstractSimpleTable<MyTablePK> {
private static final long serialVersionUID = 1L;
@EmbeddedId
private MyTablePK mytablePK;
@Column(name = "COLUMN1" )
private String column1;
@Column(name = "COLUMN2" )
private String column2;
public MyTablePK getMytablePK() {
return sysusrPK;
}
public void setMytablePK(MyTablePK mytablePK) {
this.mytablePK = mytablePK;
}
public String getColumn1() {
return column1;
}
public void setColumn1( String column1) {
this.column1 = column1;
}
public String getColumn2() {
return column2;
}
public void setColumn2( String column2) {
this.column2 = column2;
}
}
And the superclass:
@MappedSuperclass
public abstract class AbstractSimpleTable<P extends Shareable> {
@Lob
@Column(name = "GENERICFIELD" )
private String genericfield;
public String getGenericfield() {
return genericfield;
}
public void setGenericfield( String genericfield) {
this.genericfield = genericfield;
}
}
Thanks for the help !
( https://hibernate.atlassian.net/browse/HHH-16412#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16412#add-comment?atlOrigin=ey... )
Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.... ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailN... ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100221- sha1:57c27f3 )
1 year, 11 months
[JIRA] (HHH-16408) query.setMaxResults(1) with EntityGraph and @ElementCollection gives wrong result in Hibernate 6
by Fouad Almalki (JIRA)
Fouad Almalki ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... ) *updated* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiMGE2MzIwOGU4... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiMGE2Mz... ) HHH-16408 ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiMGE2Mz... ) query.setMaxResults(1) with EntityGraph and @ElementCollection gives wrong result in Hibernate 6 ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiMGE2Mz... )
Change By: Fouad Almalki ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... )
Given:
{code:java}@Table(name = "users")
@Entity
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
Integer id;
@NotNull
@Column(name = "username")
String username;
@ElementCollection
@CollectionTable(name = "users_roles_mapping", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "role_name")
Set<String> roles;
// ...
}{code}
{code:sql} -- MSSQL 2022
CREATE TABLE users (
id INT NOT NULL IDENTITY,
username VARCHAR(50) NOT NULL,
CONSTRAINT pk_users PRIMARY KEY (id)
);
CREATE TABLE roles (
name VARCHAR(50) NOT NULL,
CONSTRAINT pk_roles PRIMARY KEY (name)
);
CREATE TABLE users_roles_mapping (
user_id INT NOT NULL,
role_name VARCHAR(50) NOT NULL,
CONSTRAINT pk_users_roles_mapping PRIMARY KEY (user_id, role_name),
CONSTRAINT fk_users_roles_mapping_user FOREIGN KEY (user_id) REFERENCES users (id),
CONSTRAINT fk_users_roles_mapping_role FOREIGN KEY (role_name) REFERENCES roles (name)
);
INSERT INTO users (username) VALUES ('user1');
INSERT INTO roles (name) VALUES ('role1'), ('role2');
INSERT INTO users_roles_mapping (user_id, role_name) VALUES (1, 'role1'), (1, 'role2');{code}
{code:java}public Set<String> getUserRoles() {
EntityGraph<UserEntity> entityGraph = entityManager.createEntityGraph(UserEntity.class);
entityGraph.addAttributeNodes("roles");
Query query = entityManager.createQuery("SELECT u FROM UserEntity u WHERE u.id = 1");
query.setMaxResults(1);
query.setHint(EntityGraphType.FETCH.getKey(), entityGraph);
UserEntity userEntity = (UserEntity) query.getSingleResult();
return userEntity.getRoles();
}{code}
{{getUserRoles}} returns 2 roles in Hibernate {{5.6.15.Final}} and returns 1 role (which is wrong) in Hibernate {{6.1.7}}.
( https://hibernate.atlassian.net/browse/HHH-16408#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16408#add-comment?atlOrigin=ey... )
Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.... ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailN... ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100221- sha1:57c27f3 )
1 year, 11 months
[JIRA] (HHH-16408) query.setMaxResults(1) with EntityGraph and @ElementCollection gives wrong result in Hibernate 6
by Fouad Almalki (JIRA)
Fouad Almalki ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... ) *created* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiNGQ0ODBiZjU3... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiNGQ0OD... ) HHH-16408 ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiNGQ0OD... ) query.setMaxResults(1) with EntityGraph and @ElementCollection gives wrong result in Hibernate 6 ( https://hibernate.atlassian.net/browse/HHH-16408?atlOrigin=eyJpIjoiNGQ0OD... )
Issue Type: Bug Affects Versions: 6.1.7 Assignee: Unassigned Components: hibernate-core Created: 30/Mar/2023 20:21 PM Priority: Critical Reporter: Fouad Almalki ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... )
Given:
@Table(name = "users" )
@Entity
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id" )
Integer id;
@NotNull
@Column(name = "username" )
String username;
@ElementCollection
@CollectionTable(name = "users_roles_mapping" , joinColumns = @JoinColumn(name = "user_id" ))
@Column(name = "role_name" )
Set< String > roles;
// ...
}
CREATE TABLE users (
id INT NOT NULL IDENTITY ,
username VARCHAR (50) NOT NULL ,
CONSTRAINT pk_users PRIMARY KEY (id)
);
CREATE TABLE roles (
name VARCHAR (50) NOT NULL ,
CONSTRAINT pk_roles PRIMARY KEY ( name )
);
CREATE TABLE users_roles_mapping (
user_id INT NOT NULL ,
role_name VARCHAR (50) NOT NULL ,
CONSTRAINT pk_users_roles_mapping PRIMARY KEY (user_id, role_name),
CONSTRAINT fk_users_roles_mapping_user FOREIGN KEY (user_id) REFERENCES users (id),
CONSTRAINT fk_users_roles_mapping_role FOREIGN KEY (role_name) REFERENCES roles ( name )
);
INSERT INTO users (username) VALUES ( 'user1' );
INSERT INTO roles ( name ) VALUES ( 'role1' ), ( 'role2' );
INSERT INTO users_roles_mapping (user_id, role_name) VALUES (1, 'role1' ), (1, 'role2' );
public Set< String > getUserRoles() {
EntityGraph<UserEntity> entityGraph = entityManager.createEntityGraph(UserEntity.class);
entityGraph.addAttributeNodes( "roles" );
Query query = entityManager.createQuery( "SELECT u FROM UserEntity u WHERE u.id = 1" );
query.setMaxResults(1);
query.setHint(EntityGraphType.FETCH.getKey(), entityGraph);
UserEntity userEntity = (UserEntity) query.getSingleResult();
return userEntity.getRoles();
}
getUserRoles returns 2 roles in Hibernate 5.6.15.Final and returns 1 role (which is wrong) in Hibernate 6.1.7.
( https://hibernate.atlassian.net/browse/HHH-16408#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16408#add-comment?atlOrigin=ey... )
Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.... ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailN... ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100221- sha1:57c27f3 )
1 year, 11 months