我正在处理spring项目的映射类中的问题。 因此,每次我搜索基类时,结果都是所有基类记录和子类记录。
父母阶级
@Data
@Entity
@Table(name="parent")
@AttributeOverrides({
@AttributeOverride(name="id", column=@Column(name="ite_id"))
})
@EqualsAndHashCode(callSuper = true)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorValue("Parent")
public class Parent extends BaseEntity {
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "itens",targetEntity = Objeto.class)
List<Objeto> objetos;
//Other fields here
}
儿童班
@Data
@Entity
@Table(name="child")
@AttributeOverrides({
@AttributeOverride(name="id", column=@Column(name="hom_id"))
})
@EqualsAndHashCode(callSuper = true)
@Polymorphism(type = PolymorphismType.EXPLICIT)
public class Child extends Parent {
@Column(name="hom_tds")
@Size(max=20)
String numeroTDS;
}
我一直在超类中查询结果,结果始终返回子类。 因此,我也尝试了Inhereted.Joined,结果相同。我查看了文档,并看到了一些有关“显式多态性”注释的内容。但是问题仍然存在。我通过执行本机查询(例如select * from item
)来部分解决此问题查询调用:
@Override
@Transactional(readOnly = true)
public List<Parent> findaAll() {
return repository.findAll();
}
classe ParentRepository
@Query("select itens from Parent itens")
public List<Parent> findAll() ;
我在https://www.baeldung.com/hibernate-inheritance网站上找到了一些解释: 实体继承意味着在查询超类时,我们可以使用多态查询来检索所有子类实体。