繁体   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