@OneToOne Dropwizard(和 Hibernate)更新后的问题

问题描述 投票:0回答:1

我正在为 Dropwizard 更新而苦苦挣扎。主要是由此产生的 Hibernate 问题。

我的模型中有几个@OneToOne 关系。真的很简单。但是在升级到 DropWizard 4(从 2.x)之后,镇上有一个新的 Hibernate。 (休眠 6)。这样一来,我在加载依赖对象时遇到异常:

java.lang.NullPointerException: Cannot invoke \"org.hibernate.sql.results.graph.Fetch.createAssembler(org.hibernate.sql.results.graph.FetchParentAccess, org.hibernate.sql.results.graph.AssemblerCreationState)\" because \"versionFetch\" is null
org.hibernate.sql.results.graph.entity.AbstractEntityInitializer.<init>(AbstractEntityInitializer.java:158)
org.hibernate.sql.results.graph.entity.internal.EntityResultInitializer.<init>(EntityResultInitializer.java:34)
org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.lambda$createResultAssembler$0(EntityResultImpl.java:105)
org.hibernate.sql.results.internal.ResultsHelper$1.resolveInitializer(ResultsHelper.java:97)
org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.createResultAssembler(EntityResultImpl.java:96)
org.hibernate.sql.results.jdbc.internal.StandardJdbcValuesMapping.resolveAssemblers(StandardJdbcValuesMapping.java:53)
org.hibernate.sql.results.internal.ResultsHelper.createRowReader(ResultsHelper.java:67)
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:422)
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:166)
org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:91)
org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31)
org.hibernate.loader.ast.internal.DatabaseSnapshotExecutor.loadDatabaseSnapshot(DatabaseSnapshotExecutor.java:187)
org.hibernate.loader.ast.internal.SingleIdEntityLoaderSupport.loadDatabaseSnapshot(SingleIdEntityLoaderSupport.java:39)
org.hibernate.persister.entity.AbstractEntityPersister.getDatabaseSnapshot(AbstractEntityPersister.java:2088)
org.hibernate.engine.internal.StatefulPersistenceContext.getDatabaseSnapshot(StatefulPersistenceContext.java:331)
org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:305)
org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:59)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:88)

实体不是很特别:

@Entity(name = "EntityA")
@Table(name = "Entity_A")
public class EntityA extends AbstractEntity {

...
    @OneToOne(mappedBy = "referenceA", fetch = FetchType.LAZY)
    private EntityB referencingB;
...
}

另一面也很简单:

@Entity(name = "EntityB")
@Table(name = "Entity_B")
public class EntityB extends AbstractEntity {
 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(foreignKey = @ForeignKey(name = "FK_ENTITY_A_2_ENTITY_B"))
    @Nullable
    private EntityA referencingA;
...
}

两个类都继承自一个带有 id 和版本的共同父亲:

@MappedSuperclass
public abstract class AbstractEntity {

 @Id
    @Column(columnDefinition = "uuid", updatable = false)
    private UUID guid;

    @Version
    @Column(name = "VERSION", nullable = false)
    private int version;
...

为了解决这个问题,我删除了@Version 注释。然后服务器启动,但乐观锁定不起作用。 :-(

我尝试了几种不同的@OneToOne 定义和@JoinColumn 定义。非在工作。 :-(

我将 Hibernate 升级到最新的 6.2.1 版本:-(

我删除了@Nullable 注释:-(

使用“旧”Hibernate 版本一切正常。而且我找不到我的问题。有什么提示吗?

非常感谢!

hibernate dropwizard one-to-one
1个回答
0
投票

我有同样的错误。你修好了吗?

© www.soinside.com 2019 - 2024. All rights reserved.