首页 > 解决方案 > HQL查询左连接和带有数组的bean

问题描述

我有 2 张桌子,上面附有豆子。

我使用带有输出 JSON 文件的 spring 构建了一些宁静。

我确实尝试使用 HQL 语言进行选择以过滤文章'046' 的1 行。

输出 JSON 返回 3 行,而不是像数据一样的 1 行。

有人可以帮助我吗?

非常感谢!

数据:

Prelievo(id)   Row(Id)  Article
1082040        1        066   
1082040        2        066 
1082040        3        046   
         

豆子:

public class RighePrelievo implements Serializable {

@Id
@Column(name = "ABAMNB")
private int id;

@Id
@Column(name = "ABALNB")
private int rigaPrelievo;

@Column(name = "ABAJCD")
private String articolo;

@JsonIgnore
@ManyToOne
@JoinColumn(name = "ABAMNB", insertable = false, updatable = false)
private Prelievo prelievo;

 ...getter and setter

}



public class Prelievo implements Serializable {

@Id
@Column(name = "AHAMNB")
private int id;

@OneToMany(mappedBy = "prelievo")
private List<RighePrelievo> righePrelievo = new ArrayList<>();



 ...getter and setter  
 }

HQL 休眠查询:

 String articolo = "046";
List<Prelievo> firstFilterPrelievi = (List<Prelievo>) sessionFactory.getCurrentSession()
                .createQuery(
                        " select distinct p from "
                        + " Prelievo  p "
                        + " left join "
                        + " RighePrelievo r"
                        + " on p.id=r.id"
                        + " where "
                        + " r.articolo = :articolo "
                )
                .setParameter("articolo", articolo)
                .list();

输出 JSON:

[
    {
        "id": 1082040,
        "righePrelievo": [
            {
                "id": 1082040,
                "rigaPrelievo": 1,
                "articolo": "066"
            },
            {
                "id": 1082040,
                "rigaPrelievo": 2,
                "articolo": "066"
            },
            {
                "id": 1082040,
                "rigaPrelievo": 3,
                "articolo": "046"
            }
        ]
    }
]

标签: javaarraysleft-joinhqlhibernate-onetomany

解决方案


推荐阅读