Java 如何使用jpa查询jpa对象列表中的参数
不幸的是,我不知道该如何表达这个问题 我有两个关系松散的表,PERSON和ASSIGNMENTJava 如何使用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;
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()