具有多个实体的命名查询并获取多个属性

Posted

技术标签:

【中文标题】具有多个实体的命名查询并获取多个属性【英文标题】:NamedQuery with multiples entities and get multiples attributes 【发布时间】:2013-11-19 02:44:48 【问题描述】:

我正在使用 JPA,我正在执行查询 SQL,但我不知道如何转换为 namedQuery 这是使用 sql 的查询:

SELECT DISTINCT o.descripcion, 
            t.descripcion ,
            d.descripcion ,
            e.numRegistrosReportados 
FROM estadisticoRD e, oficina o, tipoOficina  t, depto d 
WHERE e.anual = 2013 AND e.mes=9 AND 
   e.codOficina='A1B'  AND
   e.codOficina = o.codOficina AND
   o.depto = d.codDepto 
GROUP BY d.descripcion, t.descripcion, o.descripcion

但是当我尝试进行命名查询时,我遇到了问题,这是命名查询的尝试:

@NamedQuery(name = "EstadisticoRD.findByEstadistico",
        query = "SELECT e FROM EstadisticoRD e,Oficina o, TipoOficina t, Depto d WHERE e.anual=:ANUAL AND e.mes=:MES AND e.codOficina=:CODOFICINA AND e.codOficina=o.codOficina")

但是当我尝试将实体的值与其他实体的值匹配时,我得到 警告The left and right expressions type must be of the same type

就在命名查询的这一部分:e.codOficina=o.codOficina

显然这不是什么大问题,因为我不知道如何从不同的实体中获取多个值。

这是实体:

public class EstadisticoRD implements Serializable

   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Basic(optional = false)
   @Column(name = "id", nullable = false)
   private Long id;
   @Column(name = "anual", length = 4)
   private String anual;
   @Column(name = "mes", length = 2)
   private String mes;
   @Column(name = "numRegistrosReportados")
   private BigInteger numRegistrosReportados;

   @ManyToOne
   private Oficina codOficina;
   @ManyToOne
   private Depto depto;

   public EstadisticoRD() 
   

如何匹配不同实体的值?

如何从命名查询中获取多个值?

感谢您的回答。

【问题讨论】:

【参考方案1】:

嗨,克里斯蒂安·查帕罗 A。 您的查询的连接部分有问题。在 JPA 中你不能使用你的结构(你可以但它不像 join 这么简单:))。 欲了解更多信息,请查看here 您的查询将如下所示:

SELECT e FROM EstadisticoRD e inner join e.codOficina as o inner join e.depto as d ...

【讨论】:

对不起,但我相信我不明白,因为我试图做一些类似的测试:SELECT e from EstadisticoRD e JOIN e.codOficina o WHERE e.codOficina = o.codOficina,我遇到了同样的问题。 问题可能在 JoinColumn 中。你能展示Oficina类吗?我看到你没有,它在 EstadisticoRD 实体中。 ManyToOne private Oficina codOficina;

以上是关于具有多个实体的命名查询并获取多个属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Core Data 中多个实体的属性获取属性值?

具有多个连接的 Doctrine 查询仅填充主实体

获取多个实体之间没有关系

从具有多个命名空间的 XElement 中获取元素

用于从实体类及其导航属性中选择多个列的 Linq Lambda 表达式

C#在以日期命名的多个子文件夹中获取具有多个通配符的文件