Java Spring数据JPA findAll,表在中间(PropertyReferenceException)
这是我的模型: 一个崇拜者与许多崇拜者联系在一起 一个Admis链接到0或一个admisret 实体:Java Spring数据JPA findAll,表在中间(PropertyReferenceException),java,spring-data-jpa,jpql,Java,Spring Data Jpa,Jpql,这是我的模型: 一个崇拜者与许多崇拜者联系在一起 一个Admis链接到0或一个admisret 实体: public class AdmisHistory { @OneToMany(fetch = FetchType.EAGER, mappedBy = "admisHistory", cascade = CascadeType.ALL, orphanRemoval = true) private List<Admis> admis = new ArrayList<
public class AdmisHistory {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "admisHistory", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Admis> admis = new ArrayList<>();
public class Admis {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = ADMIS_HISTORY_ID)
private AdmisHistory admisHistory;
@OneToOne(mappedBy = "admis", cascade = CascadeType.ALL)
private AdmisRejet admisRejet;
public class AdmisRejet {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = ADMIS_ID)
private Admis admis;
我尝试使用@Query,但语法不好:
public interface AdmisRejetRepository extends CrudRepository<AdmisRejet, Long> {
@Query("SELECT a " +
"FROM AdmisRejet ar " +
"LEFT JOIN ar.admis a, " +
"LEFT JOIN a.admisHistory ah " +
"WHERE ah = :admisHistory")
List< AdmisRejet> findAllByHistory(AdmisHistory admisHistory);
}
我怎么做呢?试试看
List< AdmisRejet> findAllAdmisRejetByAdmisHistoryWhereAdmisRejecIsNotNul(AdmisHistory admisHistory);
或者类似的东西。如果我正在阅读规范,请更正,这应该可以
@Query("SELECT DISTINCT ar
FROM AdmisRejet ar
WHERE ar.admis.admisHistory = :history")
List<AdmisRejet> findAdmisRejetByAdmisHistory(AdmisHistory history);
使用@Query注释您的方法,并指定适当的JPQL查询作为注释的值。从方法名派生的自动查询只适用于像findByName这样的简单内容。@JBNizet不正确;Spring数据可以生成这样的遍历查询。问题在于关系模型,既因为admiss不是admis,也因为映射似乎不完全匹配。@chrylis admiss->admis打字错误。你的意思是“名单发现者管理者管理崇拜者;”生成横向查询的正确方法是什么?这个问题来自于我的实体?很难确切地说出对象图的含义,特别是因为不透明的联接表,但是你没有指定根对象,我认为你想要的是List findAllByAdmisAdmisRejetAdmisHistory。这就是说,由于反复使用Admis,直接用JPQL编写查询并将方法命名为可读的方法可能会更清晰。尝试使用@query,但找不到正确的语法请参见edit
public interface AdmisRejetRepository extends CrudRepository<AdmisRejet, Long> {
@Query("SELECT a " +
"FROM AdmisRejet ar " +
"LEFT JOIN ar.admis a, " +
"LEFT JOIN a.admisHistory ah " +
"WHERE ah = :admisHistory")
List< AdmisRejet> findAllByHistory(AdmisHistory admisHistory);
}
List< AdmisRejet> findAllAdmisRejetByAdmisHistoryWhereAdmisRejecIsNotNul(AdmisHistory admisHistory);
@Query("SELECT DISTINCT ar
FROM AdmisRejet ar
WHERE ar.admis.admisHistory = :history")
List<AdmisRejet> findAdmisRejetByAdmisHistory(AdmisHistory history);