Spring Data - 如何通过多态关系选择实体

时间:2017-06-08 18:59:13

标签: java hibernate inheritance polymorphism spring-data

已经成功构建了通用的多态模型,就像这样:

public interface IProduct {}

......有两种接口实现可供使用。

#1

@Entity
public class Cup impements IProduct, Serializable {
    ... setter&getter&equals&hashCode
}

#2

@Entity
public class Kettle implements IProduct, Serializable {
     ... setter&getter&equals&hashCode
}

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

@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;
    ...
}

但是根据生成的数据发现配置工作正常。

但是,我无法使用Spring Data存储库构建查找查询以查找产品的Item

public interface ItemRepository extends JpaRepository<Item, Long> {
    Item findByProduct(IProduct product);
}

...由于Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [product] on this ManagedType错误,该应用无法启动。

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

仍然无法运作。有没有办法通过它的多态依赖来找到一个实体?

0 个答案:

没有答案