gpt4 book ai didi

java - 避免批量查询中出现不同的关键字

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:13 25 4
gpt4 key购买 nike

使用 Eclipselink 2.4.1,我试图避免“distinct”关键字出现在批量查询中。文档表明,当使用批处理类型 EXISTS 时,不使用 unique 关键字,但是根据我的经验,在检索多对一关系时,在所有情况下都会使用它。例如,我在 oracle 中针对 SCOTT 演示模式编写了以下类:

@Entity
public class Emp implements Serializable {
@Id private long empno;
private String ename;
@ManyToOne
@JoinColumn(name="DEPTNO")
private Dept dept;
public Emp() { }
public long getEmpno() { return this.empno; }
public void setEmpno(long empno) { this.empno = empno; }
public String getEname() { return this.ename; }
public void setEname(String ename) { this.ename = ename; }
public Dept getDept() { return this.dept; }
public void setDept(Dept dept) { this.dept = dept; }
}

@Entity
public class Dept implements Serializable {
@Id private long deptno;
private String dname;
public Dept() {}
public long getDeptno() { return this.deptno; }
public void setDeptno(long deptno) { this.deptno = deptno; }
public String getDname() { return this.dname; }
public void setDname(String dname) { this.dname = dname; }
}

我正在尝试通过批量获取来检索员工和部门:

Query query = em.createQuery("select emp from Emp as emp ");
query.setHint(QueryHints.BATCH_TYPE, BatchFetchType.EXISTS);
query.setHint(QueryHints.BATCH, "emp.dept");
List<Emp> resultList = query.getResultList();
resultList.get(0).getDept();

生成以下 SQL:

[EL Fine]: sql: 2012-12-12 17:04:21.178--ServerSession(1034011695)--Connection(312759349)--SELECT EMPNO, ENAME, DEPTNO FROM SCOTT.EMP
[EL Fine]: sql: 2012-12-12 17:04:21.286--ServerSession(1034011695)--Connection(312759349)--SELECT distinct t0.DEPTNO, t0.DNAME FROM SCOTT.DEPT t0 WHERE EXISTS (SELECT t1.EMPNO FROM SCOTT.EMP t1 WHERE (t0.DEPTNO = t1.DEPTNO))

除了使用 EXISTS 批处理类型来避免批量查询中出现重复关键字之外,是否还需要做一些额外的事情?

最佳答案

请记录一个错误。它应该只用于 JOIN 批处理。

您可以在查询中将 unique 设置为 false 来避免这种情况。 (没有提示,您需要在根ObjectLevelReadQuery上调用dontUseDistinct())。

((ObjectLevelReadQuery)((JpaQuery)query).getDatabaseQuery()).dontUseDistinct();

关于java - 避免批量查询中出现不同的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com