Spring Data JPA:处理其他实体的继承属性

情况:(班级为实体)

  • class1具有class2类型的属性
  • subclass1 (从class1继承)使用类型subclass2 (从class2继承)的属性
  • subclass2有一个class2没有的property2

我怎么能实现这个在subclass1Repository中:

findByProperty_property2(xx) 

很明显,我得到“无属性”属性2“找到类型class1 ,遍历路径: class2 .property2。

JPA显然不知道属性的类型是subclass2

 @Entity open class Class1 constructor( @ManyToOne property: Class2 ) @Entity open class Class 2 constructor() { } @Entity open class subclass1 constructor( property: Subclass2 ):Class1(property = property) @Entity open class subclass2 constructor( property2: Double ):Class2(..) interface subclass1Repository: JpaRepository<Subclass1, Long>{ fun findByProperty_property2(prop2:Double): List<Subclass1> } 

你想映射subclass1和subclass2? 我对你的问题有点失落,但希望这对你有价值。

 @Entity public class Foo1 { @Id private int id; // primary key is great to have for map tables. @ManyToMany // or something @JoinTables(... private List<Foo2> foo2; } @Entity public class Foo2 { @Id private int id; @ManyToMany(mappedBy="foo2") private List<Foo1> foo1; } 

创建getter和setter。


foo2的存储库:

 public interface Foo2Repository extends CrudRepository<Foo2, Long> { Foo2 findBySomeValue(Double doubleValue); 

您可以为方法创建@Service类:

 @Service pubic class FooService { @Autowired private Foo2Repository foo2Repository; public List<Foo1> ListMyFoo(Double doubleValue) { return this.yourInterface.findBySomeValue(doubleValue).getFoo1(); } 

它会退缩你一个基于列表的Foo2 SomeValue是真实的。