Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA标准API将';在';表达式到多个';或';_Java_Jpa_Openjpa - Fatal编程技术网

Java JPA标准API将';在';表达式到多个';或';

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

带有“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
    @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
  • 马里亚布
更新:

我还尝试添加如下mariadb方言,但没有帮助

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