Java JPA标准API将';在';表达式到多个';或';
带有“in”表达式的JPA标准API转换为多个“OR”而不是“in” e、 g 我的主要模型Java JPA标准API将';在';表达式到多个';或';,java,jpa,openjpa,Java,Jpa,Openjpa,带有“in”表达式的JPA标准API转换为多个“OR”而不是“in” e、 g 我的主要模型 public class Person { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; ... } 多对一关系 public class Department { @Id @C
public class Person {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
private Department department;
...
}
多对一关系
public class Department {
@Id
@Column(name="department_id")
private Integer departmentId;
@OneToMany(mappedBy="department")
private List<Person> person;
...
}
但我想得到的是
SELECT t0.person_id, ...
FROM person t0
WHERE t0.department_id IN (?, ?, ?)
环境:
- 大部头7.0.3
- 嵌入式OpenJPA
- 马里亚布
<property name="openjpa.jdbc.DBDictionary" value="mariadb" />
解决方案是使用表达式,例如:
List<Long> departmentIdsList = new ArrayList();
departmentIdsList.add(1L);
departmentIdsList.add(2L);
departmentIdsList.add(3L);
Expression<Long> exp = personRoot.get("departmentId");//"departmentId" field name to be equated
predicateList.add(exp.in(departmentIdsList));
List departmentIdsList=new ArrayList();
部门ID列表。添加(1L);
部门ID列表。添加(2L);
部门ID列表。添加(3L);
表达式exp=personRoot.get(“部门ID”)//“departmentId”字段名称应相等
add(exp.in(departmentIdsList));
上述代码段的计算结果应与子句中的一样可能后端(方言)没有“in”???。使用的是什么真正的数据库?它是mariadb。Mariadb支持“in”尝试将
java.sql.Array
传递给in
-使用sql“…in(?”
)。尝试指定“(1,2,3)”作为参数,并在运行时提供一个列表作为参数值。在sql中,表达式:x in(1,2,3)
相当于x=1或x=2或x=3
,它给出了完全相同的结果。你为什么担心呢?我个人不在乎。
SELECT t0.person_id, ...
FROM person t0
WHERE t0.department_id IN (?, ?, ?)
<property name="openjpa.jdbc.DBDictionary" value="mariadb" />
List<Long> departmentIdsList = new ArrayList();
departmentIdsList.add(1L);
departmentIdsList.add(2L);
departmentIdsList.add(3L);
Expression<Long> exp = personRoot.get("departmentId");//"departmentId" field name to be equated
predicateList.add(exp.in(departmentIdsList));