Yoann Rodière (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%...
) *updated* an issue
Hibernate ORM (
https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiOGU2MWQxZDY1...
) / Bug (
https://hibernate.atlassian.net/browse/HHH-15606?atlOrigin=eyJpIjoiOGU2MW...
) HHH-15606 (
https://hibernate.atlassian.net/browse/HHH-15606?atlOrigin=eyJpIjoiOGU2MW...
) @OneToOne(mappedBy = ..., fetch = LAZY) in embedded leads to IllegalArgumentException:
Can not set [...] to LazyPropertyInitializer$1 (
https://hibernate.atlassian.net/browse/HHH-15606?atlOrigin=eyJpIjoiOGU2MW...
)
Change By: Yoann Rodière (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%...
)
Affects Hibernate ORM 6.2, probably also 6.1 and 6.0, but definitely not 5.6.
This With bytecode enhancement enabled, this model:
{noformat} @Entity(name = "entitya")
public static class EntityA {
@Id
private Integer id;
@Embedded
private EmbeddedValue embedded = new EmbeddedValue();
public EntityA() {
}
private EntityA(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public EmbeddedValue getEmbedded() {
return embedded;
}
public void setEmbedded(EmbeddedValue embedded) {
this.embedded = embedded;
}
}
@Embeddable
public static class EmbeddedValue implements Serializable {
@OneToOne(mappedBy = "entityA", fetch = FetchType.LAZY)
private EntityB entityB;
public EmbeddedValue() {
}
public EntityB getEntityB() {
return entityB;
}
public void setEntityB(
EntityB entityB) {
this.entityB = entityB;
}
}
@Entity(name = "entityb")
public static class EntityB {
@Id
private Integer id;
@OneToOne
private EntityA entityA;
public EntityB() {
}
private EntityB(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public EntityA getEntityA() {
return entityA;
}
public void setEntityA(EntityA entityA) {
this.entityA = entityA;
}
}{noformat}
Leads to this stacktrace upon loading EntityA:
{noformat}org.hibernate.InstantiationException: Could not instantiate entity: :
org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest$EmbeddedValue
at
org.hibernate.metamodel.internal.EmbeddableInstantiatorPojoStandard.instantiate(EmbeddableInstantiatorPojoStandard.java:84)
at
org.hibernate.sql.results.graph.embeddable.AbstractEmbeddableInitializer.createCompositeInstance(AbstractEmbeddableInitializer.java:326)
at
org.hibernate.sql.results.graph.embeddable.AbstractEmbeddableInitializer.prepareCompositeInstance(AbstractEmbeddableInitializer.java:242)
at
org.hibernate.sql.results.graph.embeddable.AbstractEmbeddableInitializer.initializeInstance(AbstractEmbeddableInitializer.java:190)
at
org.hibernate.sql.results.internal.StandardRowReader.coordinateInitializers(StandardRowReader.java:153)
at
org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:98)
at
org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:184)
at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33)
at
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:443)
at
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:166)
at
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:91)
at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31)
at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:140)
at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:110)
at
org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:72)
at
org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4338)
at
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4328)
at
org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:589)
at
org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:575)
at
org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:544)
at
org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:537)
at
org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:199)
at
org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:238)
at
org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:103)
at
org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at
org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1241)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1229)
at
org.hibernate.loader.access.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:192)
at
org.hibernate.loader.access.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:158)
at
org.hibernate.loader.access.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:105)
at
org.hibernate.loader.access.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:158)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1021)
at
org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest.lambda$test$1(LazyOneToOneMappedByInEmbeddedTest.java:51)
at
org.hibernate.testing.transaction.TransactionUtil2.inTransaction(TransactionUtil2.java:96)
at
org.hibernate.testing.transaction.TransactionUtil2.lambda$inTransaction$0(TransactionUtil2.java:76)
at org.hibernate.testing.transaction.TransactionUtil2.inSession(TransactionUtil2.java:35)
at
org.hibernate.testing.transaction.TransactionUtil2.inTransaction(TransactionUtil2.java:74)
at
org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase.inTransaction(BaseNonConfigCoreFunctionalTestCase.java:591)
at
org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest.test(LazyOneToOneMappedByInEmbeddedTest.java:50)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
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.hibernate.testing.junit4.ExtendedFrameworkMethod.invokeExplosively(ExtendedFrameworkMethod.java:45)
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.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299)
at
org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.hibernate.PropertyAccessException: Could not set value of type
[org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer$1] :
`org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest$EmbeddedValue.entityB`
(setter)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:79)
at org.hibernate.property.access.spi.EnhancedSetterImpl.set(EnhancedSetterImpl.java:38)
at
org.hibernate.metamodel.mapping.internal.AbstractEmbeddableMapping.lambda$setValues$1(AbstractEmbeddableMapping.java:106)
at
org.hibernate.metamodel.mapping.internal.EmbeddableMappingTypeImpl.forEachAttributeMapping(EmbeddableMappingTypeImpl.java:720)
at
org.hibernate.metamodel.mapping.internal.AbstractEmbeddableMapping.setValues(AbstractEmbeddableMapping.java:105)
at
org.hibernate.metamodel.internal.EmbeddableInstantiatorPojoStandard.instantiate(EmbeddableInstantiatorPojoStandard.java:78)
... 54 more
Caused by: java.lang.IllegalArgumentException: Can not set
org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest$EntityB
field
org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.LazyOneToOneMappedByInEmbeddedTest$EmbeddedValue.entityB
to org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer$1
at
java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at
java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at
java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.base/java.lang.reflect.Field.set(Field.java:780)
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:52)
... 59 more{noformat}
(
https://hibernate.atlassian.net/browse/HHH-15606#add-comment?atlOrigin=ey...
) Add Comment (
https://hibernate.atlassian.net/browse/HHH-15606#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=Em...
) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100209- sha1:13f5f09 )