关于ManyToMany关系的JPA查询注释工作不正常

时间:2018-02-24 17:04:31

标签: java jquery sql jpa spring-boot

我正在尝试实现这样的示例:Person类有一个它喜欢的地方列表。但是当我想查询它时,我希望结果为每个人只有最喜欢的地方(只是第一个不是全部)。所以我这样做了:

@Entity
class Person{

    ...

    @ManyToMany(cascade = {CascadeType.REFRESH,CascadeType.PERSIST}, fetch = FetchType.EAGER)
    @JoinTable(name = "person_favorite_place",
            joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "place_id", referencedColumnName = "id")
    )
    @OrderColumn(name="favorite_place_order")
    List<Place> favoritePlaces;
}

在存储库中,我做了:

public interface PersonRepository extends JpaRepository<Person, Long> {

    @Query(value = "select person0_.id as id1_0_0_, person0_.age as age2_0_0_, person0_.name as name3_0_0_, favoriteme1_.person_id as person_id1_1_1_, place2_.id as place_id2_1_1_, favoriteme1_.favorite_place_order as favorite3_1_, place2_.id as id1_3_2_, place2_.invented as invented2_3_2_, place2_.name as name3_3_2_ from person person0_ left outer join person_favorite_place favoriteme1_ on person0_.id=favoriteme1_.person_id left outer join place place2_ on favoriteme1_.place_id=place2_.id where person0_.id=:personId  and favoriteme1_.favorite_place_order = 0", nativeQuery = true)
    Person getPersonWithFavoritePlace(@Param("personId") Long personId);

}

正如预期的那样,查询需要为每个Person返回1个Place,但它总是返回Person喜欢的所有位置。我在这里做错了什么?

0 个答案:

没有答案