[JIRA] (HHH-16759) Merge fails when entity has an Embedded Java record
by Omar aloraini (JIRA)
Omar aloraini ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5d21a95... ) *updated* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiY2NiNTZiZjk0... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiY2NiNT... ) HHH-16759 ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiY2NiNT... ) Merge fails when entity has an Embedded Java record ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiY2NiNT... )
Change By: Omar aloraini ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5d21a95... )
[ https://discourse.hibernate.org/t/hibernate-6-and-java-records-unable-so-... |https://discourse.hibernate.org/t/hibernate-6-and-java-records-unable-so-persist/7761]
Test case:
{ { noformat} package org.hibernate.bugs;
import jakarta.persistence.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
*
This template demonstrates how to develop a test case for Hibernate ORM, using the Java Persistence API.
*/
public class JPAUnitTestCase {
private EntityManagerFactory entityManagerFactory;
@Before
public void init() {
entityManagerFactory = Persistence.createEntityManagerFactory( "templatePU" );
}
@After
public void destroy() {
entityManagerFactory.close();
}
// Entities are auto-discovered, so just add them anywhere on class-path
// Add your tests, using standard JUnit.
@Test
public void test() {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( new MyEntity( 1L, new MyRecord( "test", "abc" ) ) );
entityManager.getTransaction().commit();
entityManager.close();
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.merge( new MyEntity( 1L, new MyRecord( "test", "d" ) ) );
entityManager.getTransaction().commit();
entityManager.close();
}
@Entity(name = "MyEntity")
public static class MyEntity {
@Id
Long id;
@Embedded
MyRecord record;
public MyEntity() {
}
public MyEntity(Long id, MyRecord record) {
this.id = id;
this.record = record;
}
public Long getId() {
return id;
}
public MyRecord getRecord() {
return record;
}
public void setId(Long id) {
this.id = id;
}
public void setRecord(MyRecord record) {
this.record = record;
}
}
@Embeddable
public static record MyRecord(String name, String description) {}
} {noformat } }
Exception:
{ { noformat} 2023-06-06 17:13:47 INFO LogHelper:31 - HHH000204: Processing PersistenceUnitInfo [name: templatePU]
2023-06-06 17:13:47 INFO Version:44 - HHH000412: Hibernate ORM core version 6.2.4.Final
2023-06-06 17:13:47 INFO Environment:159 - HHH000205: Loaded properties from resource hibernate.properties: {hibernate.format_sql=true, jakarta.persistence.validation.mode=NONE, hibernate.dialect=org.hibernate.dialect.H2Dialect, hibernate.connection.username=sa, hibernate.connection.url=jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1, hibernate.max_fetch_depth=5, hibernate.show_sql=false, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.driver_class=org.h2.Driver, hibernate.connection.password=****, hibernate.bytecode.use_reflection_optimizer=true, hibernate.cache.region_prefix=hibernate.test, hibernate.connection.pool_size=5, hibernate.cache.region.factory_class=org.hibernate.testing.cache.CachingRegionFactory, hibernate.service.allow_crawling=false, hibernate.session.events.log=true}
2023-06-06 17:13:47 INFO Environment:191 - HHH000406: Using bytecode reflection optimizer
2023-06-06 17:13:47 WARN CachingRegionFactory:48 - org.hibernate.testing.cache.CachingRegionFactory should be only used for testing.
2023-06-06 17:13:47 WARN pooling:80 - HHH10001002: Using built-in connection pool (not intended for production use)
2023-06-06 17:13:47 INFO pooling:139 - HHH10001005: Loaded JDBC driver class: org.h2.Driver
2023-06-06 17:13:47 INFO pooling:161 - HHH10001012: Connecting with JDBC URL [jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1]
2023-06-06 17:13:47 INFO pooling:170 - HHH10001001: Connection properties: {password=****, user=sa}
2023-06-06 17:13:47 INFO pooling:174 - HHH10001003: Autocommit mode: false
2023-06-06 17:13:47 INFO pooling:366 - HHH10001115: Connection pool size: 5 (min=1)
2023-06-06 17:13:48 INFO BytecodeProviderInitiator:53 - HHH000021: Bytecode provider name : bytebuddy
2023-06-06 17:13:48 INFO JtaPlatformInitiator:51 - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.WildFlyStandAloneJtaPlatform]
Hibernate:
drop table if exists MyEntity cascade
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4b9c411] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
create table MyEntity (
id bigint not null,
description varchar(255),
name varchar(255),
primary key (id)
)
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3e4d40ea] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
insert
into
MyEntity
(name,description,id)
values
(?,?,?)
2023-06-06 17:13:48 INFO StatisticalLoggingSessionEventListener:261 - Session Metrics {
30649 nanoseconds spent acquiring 1 JDBC connections;
73209 nanoseconds spent releasing 1 JDBC connections;
1667250 nanoseconds spent preparing 1 JDBC statements;
642541 nanoseconds spent executing 1 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
25512091 nanoseconds spent executing 1 flushes (flushing a total of 1 entities and 0 collections);
0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
}
Hibernate:
select
m1_0.id,
m1_0.name,
m1_0.description
from
MyEntity m1_0
where
m1_0.id=?
Hibernate:
drop table if exists MyEntity cascade
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@388be5fd] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
2023-06-06 17:13:48 INFO pooling:608 - HHH10001008: Cleaning up connection pool [jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1]
2023-06-06 17:13:48 ERROR pooling:470 - Connection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1
2023-06-06 17:13:48 ERROR pooling:301 - Connection leak detected: there are 1 unclosed connections
org.hibernate.PropertyAccessException: Could not set value of type [java.lang.String] : `org.hibernate.bugs.JPAUnitTestCase$MyRecord.name` (setter)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:86)
at org.hibernate.metamodel.mapping.internal.AbstractEmbeddableMapping.setValues(AbstractEmbeddableMapping.java:112)
at org.hibernate.type.ComponentType.setPropertyValues(ComponentType.java:450)
at org.hibernate.type.ComponentType.replace(ComponentType.java:564)
at org.hibernate.type.TypeHelper.replace(TypeHelper.java:89)
at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:502)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:354)
at org.hibernate.event.internal.DefaultMergeEventListener.merge(DefaultMergeEventListener.java:149)
at org.hibernate.event.internal.DefaultMergeEventListener.doMerge(DefaultMergeEventListener.java:142)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:80)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:848)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:834)
at org.hibernate.bugs.JPAUnitTestCase.test(JPAUnitTestCase.java:43)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: java.lang.IllegalAccessException: Can not set final java.lang.String field org.hibernate.bugs.JPAUnitTestCase$MyRecord.name to java.lang.String
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80)
at java.base/jdk.internal.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifiedObjectFieldAccessorImpl.java:79)
at java.base/java.lang.reflect.Field.set(Field.java:799)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:55)
... 43 more
{noformat } }
( https://hibernate.atlassian.net/browse/HHH-16759#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16759#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#100225- sha1:3b7cdab )
2 years, 10 months
[JIRA] (HHH-16759) Merge fails when entity has an Embedded Java record
by Omar aloraini (JIRA)
Omar aloraini ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5d21a95... ) *created* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiNzlmZWJmMGUw... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiNzlmZW... ) HHH-16759 ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiNzlmZW... ) Merge fails when entity has an Embedded Java record ( https://hibernate.atlassian.net/browse/HHH-16759?atlOrigin=eyJpIjoiNzlmZW... )
Issue Type: Bug Affects Versions: 6.2.4 Assignee: Unassigned Components: hibernate-core Created: 06/Jun/2023 07:14 AM Priority: Minor Reporter: Omar aloraini ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5d21a95... )
https://discourse.hibernate.org/t/hibernate-6-and-java-records-unable-so-...
Test case:
{{package org.hibernate.bugs;
import jakarta.persistence.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* This template demonstrates how to develop a test case for Hibernate ORM, using the Java Persistence API.
*/
public class JPAUnitTestCase {
private EntityManagerFactory entityManagerFactory;
@Before
public void init()
{ entityManagerFactory = Persistence.createEntityManagerFactory( "templatePU" ); }
@After
public void destroy()
{ entityManagerFactory.close(); }
// Entities are auto-discovered, so just add them anywhere on class-path
// Add your tests, using standard JUnit.
@Test
public void test()
{ EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); entityManager.persist( new MyEntity( 1L, new MyRecord( "test", "abc" ) ) ); entityManager.getTransaction().commit(); entityManager.close(); entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); entityManager.merge( new MyEntity( 1L, new MyRecord( "test", "d" ) ) ); entityManager.getTransaction().commit(); entityManager.close(); }
@Entity(name = "MyEntity")
public static class MyEntity {
@Id
Long id;
@Embedded
MyRecord record;
public MyEntity() {
}
public MyEntity(Long id, MyRecord record)
{ this.id = id; this.record = record; }
public Long getId()
{ return id; }
public MyRecord getRecord()
{ return record; }
public void setId(Long id)
{ this.id = id; }
public void setRecord(MyRecord record)
{ this.record = record; }
}
@Embeddable
public static record MyRecord(String name, String description) {}
}}}
Exception:
{{2023-06-06 17:13:47 INFO LogHelper:31 - HHH000204: Processing PersistenceUnitInfo [name: templatePU]
2023-06-06 17:13:47 INFO Version:44 - HHH000412: Hibernate ORM core version 6.2.4.Final
2023-06-06 17:13:47 INFO Environment:159 - HHH000205: Loaded properties from resource hibernate.properties:
{hibernate.format_sql=true, jakarta.persistence.validation.mode=NONE, hibernate.dialect=org.hibernate.dialect.H2Dialect, hibernate.connection.username=sa, hibernate.connection.url=jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1, hibernate.max_fetch_depth=5, hibernate.show_sql=false, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.driver_class=org.h2.Driver, hibernate.connection.password=****, hibernate.bytecode.use_reflection_optimizer=true, hibernate.cache.region_prefix=hibernate.test, hibernate.connection.pool_size=5, hibernate.cache.region.factory_class=org.hibernate.testing.cache.CachingRegionFactory, hibernate.service.allow_crawling=false, hibernate.session.events.log=true}
2023-06-06 17:13:47 INFO Environment:191 - HHH000406: Using bytecode reflection optimizer
2023-06-06 17:13:47 WARN CachingRegionFactory:48 - org.hibernate.testing.cache.CachingRegionFactory should be only used for testing.
2023-06-06 17:13:47 WARN pooling:80 - HHH10001002: Using built-in connection pool (not intended for production use)
2023-06-06 17:13:47 INFO pooling:139 - HHH10001005: Loaded JDBC driver class: org.h2.Driver
2023-06-06 17:13:47 INFO pooling:161 - HHH10001012: Connecting with JDBC URL [jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1]
2023-06-06 17:13:47 INFO pooling:170 - HHH10001001: Connection properties:
{password=****, user=sa}
2023-06-06 17:13:47 INFO pooling:174 - HHH10001003: Autocommit mode: false
2023-06-06 17:13:47 INFO pooling:366 - HHH10001115: Connection pool size: 5 (min=1)
2023-06-06 17:13:48 INFO BytecodeProviderInitiator:53 - HHH000021: Bytecode provider name : bytebuddy
2023-06-06 17:13:48 INFO JtaPlatformInitiator:51 - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.WildFlyStandAloneJtaPlatform]
Hibernate:
drop table if exists MyEntity cascade
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4b9c411] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
create table MyEntity (
id bigint not null,
description varchar(255),
name varchar(255),
primary key (id)
)
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3e4d40ea] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
insert
into
MyEntity
(name,description,id)
values
(?,?,?)
2023-06-06 17:13:48 INFO StatisticalLoggingSessionEventListener:261 - Session Metrics
{ 30649 nanoseconds spent acquiring 1 JDBC connections; 73209 nanoseconds spent releasing 1 JDBC connections; 1667250 nanoseconds spent preparing 1 JDBC statements; 642541 nanoseconds spent executing 1 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 25512091 nanoseconds spent executing 1 flushes (flushing a total of 1 entities and 0 collections); 0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections) }
Hibernate:
select
m1_0.id,
m1_0.name,
m1_0.description
from
MyEntity m1_0
where
m1_0.id=?
Hibernate:
drop table if exists MyEntity cascade
2023-06-06 17:13:48 INFO access:52 - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@388be5fd] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
2023-06-06 17:13:48 INFO pooling:608 - HHH10001008: Cleaning up connection pool [jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1]
2023-06-06 17:13:48 ERROR pooling:470 - Connection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1
2023-06-06 17:13:48 ERROR pooling:301 - Connection leak detected: there are 1 unclosed connections
org.hibernate.PropertyAccessException: Could not set value of type [java.lang.String] : `org.hibernate.bugs.JPAUnitTestCase$MyRecord.name` (setter)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:86)
at org.hibernate.metamodel.mapping.internal.AbstractEmbeddableMapping.setValues(AbstractEmbeddableMapping.java:112)
at org.hibernate.type.ComponentType.setPropertyValues(ComponentType.java:450)
at org.hibernate.type.ComponentType.replace(ComponentType.java:564)
at org.hibernate.type.TypeHelper.replace(TypeHelper.java:89)
at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:502)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:354)
at org.hibernate.event.internal.DefaultMergeEventListener.merge(DefaultMergeEventListener.java:149)
at org.hibernate.event.internal.DefaultMergeEventListener.doMerge(DefaultMergeEventListener.java:142)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:80)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:848)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:834)
at org.hibernate.bugs.JPAUnitTestCase.test(JPAUnitTestCase.java:43)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: java.lang.IllegalAccessException: Can not set final java.lang.String field org.hibernate.bugs.JPAUnitTestCase$MyRecord.name to java.lang.String
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80)
at java.base/jdk.internal.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifiedObjectFieldAccessorImpl.java:79)
at java.base/java.lang.reflect.Field.set(Field.java:799)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:55)
... 43 more
}}
( https://hibernate.atlassian.net/browse/HHH-16759#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16759#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#100225- sha1:3b7cdab )
2 years, 10 months
[JIRA] (HHH-16758) Hibernate throws error when using @ElementCollection
by Brent Watson (JIRA)
Brent Watson ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=712020%... ) *created* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiYTE0MjVkMzZm... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16758?atlOrigin=eyJpIjoiYTE0Mj... ) HHH-16758 ( https://hibernate.atlassian.net/browse/HHH-16758?atlOrigin=eyJpIjoiYTE0Mj... ) Hibernate throws error when using @ElementCollection ( https://hibernate.atlassian.net/browse/HHH-16758?atlOrigin=eyJpIjoiYTE0Mj... )
Issue Type: Bug Affects Versions: 6.2.4 Assignee: Unassigned Components: hibernate-entitymanager Created: 06/Jun/2023 07:00 AM Environment: Hibernate 6.0.0, Spring 3, Java 17, Kotlin Labels: breaking-change Priority: Critical Reporter: Brent Watson ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=712020%... )
When using @ElementCollection with Set = SetOf() I get org.hibernate.NotYetImplementedFor6Exception: Only support for basic-valued, entity-valued and embedded model-parts have been implemented : userNames [PluralAttribute]
This worked before upgrading to hibernate 6
@SqlResultSetMappings(
SqlResultSetMapping(
name = "Mapping.User",
entities = [
EntityResult(
entityClass = User::class,
fields = [
FieldResult(name = "id", column = "id"),
FieldResult(name = "userNames", column = "user_names"),
]
)
],
),
SqlResultSetMapping(
name = "Mapping.User.count",
columns = [ColumnResult(name = "rowCount")]
)
)
@Entity
@Table(name = "users")
data class User(
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "id")
var id: UUID = UUID.randomUUID(),@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(
name = "users_names",
joinColumns = [JoinColumn(name = "user_id", referencedColumnName = "id")]
)
@Column(name = "user_names")
var userNames: Set<String> = setOf(),
)
( https://hibernate.atlassian.net/browse/HHH-16758#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16758#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#100225- sha1:3b7cdab )
2 years, 10 months