Spring Data JPA: обращение с унаследованным свойством другого объекта

Ситуация: (классы, являющиеся сущностями)

  • class1 имеет свойство типа class2
  • subclass1 (наследует от класса 1 ) использует тип subclass2 (наследует от класса 2 ) для свойства
  • subcl22 имеет свойство2, что класс2 не имеет

Как я могу достичь этого в subclass1Repository:

findByProperty_property2(xx) 

Очевидно, я получаю «Свойство свойства 2», найденное для типа class1 , Traversed path: 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> } 

Вы хотите отобразить подкласс1 и подкласс2? Я был немного потерян с вашим вопросом … но надеюсь, что это имеет ценность для вас.

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

создавать геттеры и сеттеры.


Репозиторий для 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 – это правда.