JoinColumn 引用一个列,但目标实体没有映射到该列的属性 JPA/Hibernate SINGLE_TABLE 继承中的错误

Ram*_*mar 2 hibernate spring-data-jpa spring-boot

我在使用 Spring Data JPA 的 Spring Boot 应用程序中有以下实体类

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "branch_type", discriminatorType = DiscriminatorType.STRING)
public class Branch {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true, name = "branch_id")
    private String branchId;
}

@Entity
@DiscriminatorValue("LOCAL")
public class LocalBranch extends Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "division_head_id", referencedColumnName = "branch_id")
    private DivisionHead divisionHead;

    // other fields and mappings

    // getters and setters
}

@Entity
@DiscriminatorValue("DIVISION")
public class DivisionHead extends Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "region_head_id", referencedColumnName = "branch_id")
    private RegionHead regionHead;

    @OneToMany(mappedBy = "divisionHead", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<LocalBranch> localBranches = new HashSet<>();

    // other fields and mappings

    // getters and setters
}

@Entity
@DiscriminatorValue("REGION")
public class RegionHead extends Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "circle_head_id", referencedColumnName = "branch_id")
    private CircleHead circleHead;

    @OneToMany(mappedBy = "regionHead", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<DivisionHead> divisions = new HashSet<>();

    // other fields and mappings

    // getters and setters
}

@Entity
@DiscriminatorValue("CIRCLE")
public class CircleHead extends Branch {
    @OneToMany(mappedBy = "circleHead", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<RegionHead> regions = new HashSet<>();

    // other fields and mappings

    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

如果我启动应用程序,我会得到 A '@JoinColumn' 引用名为 'branch_id' 的列,但目标实体 divisionHead.RegionHead 没有映射到此列的属性。

我不明白为什么 Hibernate/Jpa 无法看到branch_id实体类中的列,即使它们是从具有唯一列的 Branch 类扩展的branch_id

如果我不提供任何 referencedColumnName 那么它工作正常。但是,我需要对列的外键引用branch_id。我尝试更改 referencedColumnName = 'branchId' (字段名称),但效果不佳(如预期)。

如何摆脱这个错误。我的实体类的关联是否有任何问题?由于它们是自引用关联,我怀疑有什么不对吗?

Gav*_*ing 5

我特别为您提出了一个问题:

https://hibernate.atlassian.net/browse/HHH-16501

并修复它。您需要等待 Hibernate 6.3。