Java 如何使用jpa查询jpa对象列表中的参数

Java 如何使用jpa查询jpa对象列表中的参数,java,hibernate,jpa,Java,Hibernate,Jpa,不幸的是,我不知道该如何表达这个问题 我有两个关系松散的表,PERSON和ASSIGNMENT public class Person { @EmbeddedId @Column PersonPK id; @Column String otherStuff; } public class PersonPK { @Column long personNumber; @Column Date hireDate;

不幸的是,我不知道该如何表达这个问题

我有两个关系松散的表,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;
}
从p人那里很容易找到一个人,其中[雇佣和终止之间的当前日期]

但是我需要对作业进行第二次查询,我只想把人员列表传回来,而不是去掉id。因此类似于作业a中的a.personId in:Persons.id.id和a.active=true


这在JPA查询中可能吗?

有一个带有日期字段的@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()
然后,您可以在需要设置参数时调用:

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()

我没有这个选择。主键的定义与数据库中的主键类似。每当有人辞职并被重新雇用时,他们都会使用相同的员工号码,日期不同。所以如果我说只有personId是密钥,我会得到一个重复的密钥错误
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()