Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA findAll,表在中间(PropertyReferenceException)_Java_Spring Data Jpa_Jpql - Fatal编程技术网

Java Spring数据JPA findAll,表在中间(PropertyReferenceException)

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<

这是我的模型:

一个崇拜者与许多崇拜者联系在一起

一个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 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);