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是真实的。