Java Spring数据-如何通过多态关系选择实体

Java Spring数据-如何通过多态关系选择实体,java,hibernate,inheritance,polymorphism,spring-data,Java,Hibernate,Inheritance,Polymorphism,Spring Data,已经成功构建了通用多态模型,如下所示: public interface IProduct {} 。。。有两种接口实现可用 一, 二, 这两个产品用作项目实体的多态依赖项: 根据生成的数据,我们发现配置工作正常 但是,我无法使用Spring数据存储库构建查找查询,以按产品查找项目: public interface ItemRepository extends JpaRepository<Item, Long> { Item findByProduct(IProduct p

已经成功构建了通用多态模型,如下所示:

public interface IProduct {}
。。。有两种接口实现可用

一,

二,

这两个产品用作项目实体的多态依赖项:

根据生成的数据,我们发现配置工作正常

但是,我无法使用Spring数据存储库构建查找查询,以按产品查找项目:

public interface ItemRepository extends JpaRepository<Item, Long> {
    Item findByProduct(IProduct product);
}
。。。由于以下原因,应用程序无法启动:java.lang.IllegalArgumentException:无法在此ManagedType错误上找到具有给定名称[product]的属性

已尝试将getId getter包含到接口中,并使用带有@MappedSuperclass注释的抽象类


还是不行。有没有一种方法可以通过一个实体的多态依赖关系来找到它?

你有什么收获吗?我也有同样的问题。@Jules,是的。该方法必须附带@Query注释。这类似于@Queryselect i from Item i,其中i.product=:product注释将允许上述代码工作。为了使用命名参数:product,您还必须将方法的参数重新设计为@Paramproduct IPProduct
@Entity
public class Kettle implements IProduct, Serializable {
     ... setter&getter&equals&hashCode
}
@Entity
public class Item implements Serializable {

...

@Any(metaColumn = @Column(name = "type"))
@AnyMetaDef(
       idType = "long",
       metaType = "string",
       metaValues = {
              @MetaValue(targetEntity = Cup.class, value = "cup"),
              @MetaValue(targetEntity = Kettle.class, value = "kettle")
       })
@JoinColumn(name = "product")
private IProduct product;
    ...
}
public interface ItemRepository extends JpaRepository<Item, Long> {
    Item findByProduct(IProduct product);
}