簡體   English   中英

我將如何使用jpa在jpa對象列表中查詢參數

[英]How would I use jpa to query for a parameter IN a list of jpa objects

不幸的是,我不知道該如何表達這個問題。

我有兩個只是松散相關的表,PERSON和ASSIGNMENT。

public class Person {

    @EmbeddedId
    @Column
    PersonPK id;

    @Column
    String otherStuff;
}

public class PersonPK {

    @Column
    long personNumber;

    @Column
    Date hireDate;

    @Column
    Date terminationDate;
}

public class Assignment {
    @Id
    @Column
    long id;

    @Column
    long personId;

    @Column
    boolean active;

    @Column
    String otherStuff;
}

可以很容易地FROM Person p WHERE [current date in between hire and termination]那里找到一個FROM Person p WHERE [current date in between hire and termination]

但是我需要對分配進行第二次查詢,我只想將“人員”列表傳遞回去,而不是剝離ID。 所以類似FROM Assignment a WHERE a.personId IN :persons.id.id AND a.active = true

JPA查詢可能嗎?

帶有這樣的日期字段的@EmbeddedId似乎@EmbeddedId 老實說,我會丟失PersonPK類,並執行以下操作:

public class Person {
    @Id
    @Column
    long personNumber;

    @Column
    Date hireDate;

    @Column
    Date terminationDate;

    @Column
    String otherStuff;
}

public class Assignment {
    @Id
    @Column
    long id;

    @ManyToOne
    Person person;

    @Column
    boolean active;

    @Column
    String otherStuff;
}

然后,您應該可以通過傳遞人員列表進行查詢:

List<Person> people = /* your list of people */
Query query = manager.createQuery("select a from Assignment a where a.person in :people");
query.setParameter("people", people);
List<Assigment> assignments = query.getResultList()

之所以@ManyToOne ,是因為您實際上是使用@ManyToOne注釋在Person類和Assignment類之間建立鏈接。

編輯:看來您無法更改架構,我只是向person添加一個靜態助手來為您獲取personNumbers:

public static List<Long> toPersonNumbers(List<Person> people) {
    List<Long> numbers = new ArrayList<Long>();
    for ( Person person: people ) {
        numbers.add(person.id.personNumber);
    }
    return numbers;
}

然后可以在需要設置參數時調用它:

List<Person> people = /* your list of people */
Query query = manager.createQuery("select a from Assignment a where a.personId in :people");
query.setParameter("people", toPersonNumbers(people));
List<Assigment> assignments = query.getResultList()

如何傳遞 Map 或 List<object> 作為 JPA 查詢的參數<div id="text_translate"><p>我需要將 map 作為 <Sting,String> 或 List 類型的輸入參數傳遞到兩個 JPA 列中,並將結果作為映射/列表中所有條目的記錄列表。</p><p> 是這樣的:</p><pre> @Query( value = "SELECT e from #{#entityName} e where e.name = KEY(someMap) and e.relationName = VALUE(someMap)") List<Member> findByNameAndRelationNameIn( @Param("someMap") Map<String, String> someMap);</pre><p> 或者</p><pre>@Query( value = "SELECT e from #{#entityName} e where e.name IN (:#{#dataSpaceMembers.?[name]}) and e.dataSpaceName IN (:#{#dataSpaceMembers.?[dataSpaceName]})") List<DataSpaceMember> findByNameAndDataSpaceIn( @Param("dataSpaceMembers") List<DataSpaceMember> dataSpaceMembers);</pre><p> 但是應用程序不會運行,因為這不是有效的 jpa 查詢。 我不想在循環中運行單個查詢,而是尋找一個可以將結果作為列表給出的查詢。</p></div></object>

[英]how to pass Map or List<Object> as a parameter to JPA query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何對參數為字符串且結果為對象列表的 JPA 查詢結果進行排序? 如何使用 {} 在 JPA 查詢中傳遞列表參數 如何在jpa查詢上傳遞參數? 我將如何審核對JPA實體列表的更改? 如何傳遞 Map 或 List<object> 作為 JPA 查詢的參數<div id="text_translate"><p>我需要將 map 作為 <Sting,String> 或 List 類型的輸入參數傳遞到兩個 JPA 列中,並將結果作為映射/列表中所有條目的記錄列表。</p><p> 是這樣的:</p><pre> @Query( value = "SELECT e from #{#entityName} e where e.name = KEY(someMap) and e.relationName = VALUE(someMap)") List<Member> findByNameAndRelationNameIn( @Param("someMap") Map<String, String> someMap);</pre><p> 或者</p><pre>@Query( value = "SELECT e from #{#entityName} e where e.name IN (:#{#dataSpaceMembers.?[name]}) and e.dataSpaceName IN (:#{#dataSpaceMembers.?[dataSpaceName]})") List<DataSpaceMember> findByNameAndDataSpaceIn( @Param("dataSpaceMembers") List<DataSpaceMember> dataSpaceMembers);</pre><p> 但是應用程序不會運行,因為這不是有效的 jpa 查詢。 我不想在循環中運行單個查詢,而是尋找一個可以將結果作為列表給出的查詢。</p></div></object> 使用In Query在JPA中的參數中添加2個列表 使用TopLink在JPA查詢中列出作為命名參數 Spring 數據JPA:查詢按列表查找對象? 如何從 MessagingGateway 設置 Jpa 查詢參數? 如何在JPA原生查詢中使用&#39;:&#39;?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM