gpt4 book ai didi

java - Hibernate JPA @Inheritance TABLE_PER_CLASS JpaRepository 子实体联合选择所有表

转载 作者:行者123 更新时间:2023-11-30 03:51:32 25 4
gpt4 key购买 nike

我有一个问题,我有一个带有继承 TABLE_PER_CLASS 的基本抽象实体站和三个子表 StationCompany StationAnalysis StationVariant

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS )
public abstract class Station {

@Entity
public class StationCompany extends Station {

@ManyToOne(optional = false, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private Company company;

@Entity
public class StationAnalysis extends StationCompany {

@ManyToOne(optional = false, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private Analysis analysis;

@Entity
public class StationVariant extends StationAnalysis {

@ManyToOne(optional = false, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private Variant variant;

public interface IStationCompanyRepository extends JpaRepository<StationCompany, Long> {

@Service
public class StationService implements IStationService<StationCompany> {

@Autowired
IStationCompanyRepository stationCompanyRepository;

然后我在StationCompany上搜索findAll,hibernate使用union select进行查询。我将仅搜索 StationCompany 条目。

select x from ( select a from StationCompany union select b from StationVariant union select c from StationAnalysis )

最佳答案

问题是 hibernate 映射。我认为从车站到车站公司再到车站的结构有问题......我用额外的 Abstract @MappedSuperclass 类解决了这个问题。之后, hibernate 选择正确的表,并且不再选择联合。

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Station {

@MappedSuperclass
public abstract class AbstractStationCompany extends Station {
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private Company company;

@Entity
public class StationCompany extends AbstractStationCompany {

@MappedSuperclass
public class AbstractStationAnalysis extends AbstractStationCompany {
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private Analysis analysis;

@Entity
public class StationAnalysis extends AbstractStationAnalysis {

@Entity
public class StationVariant extends AbstractStationAnalysis {

关于java - Hibernate JPA @Inheritance TABLE_PER_CLASS JpaRepository 子实体联合选择所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24326442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com