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' (字段名称),但效果不佳(如预期)。
如何摆脱这个错误。我的实体类的关联是否有任何问题?由于它们是自引用关联,我怀疑有什么不对吗?
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |