Hibernate 更新后无法在视图上使用关联

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

这是场景:

EntityAEntityB之间存在一对多关联:

@Entity
@Table(name = "EntityA")
class EntityA {
    @Id
    Long idEntityA;
    
    @OneToMany(mappedBy = "entityA", fetch = FetchType.LAZY)
    Set<EntityB> entitiesB;
}

@Entity
@Table(name = "EntityB")
class EntityB {
    @Id
    Long idEntityB;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idEntityA")
    private EntityA entityA;
}

还有一个数据库视图,其中包含 EntityA 记录的子集。它有自己的实体表示:

@Entity
@Table(name = "V_EntityA")
class ViewEntityA {
    @Id
    Long idEntityA;

    @OneToMany(mappedBy = "entityA", fetch = FetchType.LAZY)
    Set<EntityB> entitiesB;
}

我一直能够使用关联 ViewEntityA.entitiesB,没有任何问题,直到升级到 SpringBoot3 和 Hibernate 6。

现在,如果我尝试访问任何 ViewEntityA.entitiesB 我收到此错误:

协会 'mypackage.ViewEntityA.entitiesB' 是 “mappedBy”名为“entityA”的属性引用了错误 实体类型“mypackage.EntityA”,预期 'mypackage.ViewEntityA'

有什么办法可以让它恢复正常吗?

java spring-boot hibernate
1个回答
0
投票

几天后,我找到了使用 @JoinColumn:

的解决方案
@Entity
@Table(name = "V_EntityA")
class ViewEntityA {
    @Id
    Long idEntityA;

    @OneToMany
    @JoinColumn(name = "idEntityA", referencedColumnName = "idEntityA")
    Set<EntityB> entitiesB;
}

有了这个 Hibernate 就能够创建正确的 SQL 查询并检索由 idEntityA 过滤的 EntityB 集合。

PS:我知道这可能不是最好的解决方案。我什至不知道 @JoinColumn 是否应该这样使用。我会对此进行更多研究,但有时您需要快速解决现实生活中的问题,迫不及待。

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