已经成功构建了通用的多态模型,就像这样:
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
注释的抽象类。
仍然无法运作。有没有办法通过它的多态依赖来找到一个实体?