Запрос HQL на левое соединение и компонент с массивом

#java #arrays #left-join #hql #hibernate-onetomany

#java #массивы #левое соединение #hql #спящий режим -onetomany

Вопрос:

У меня есть 2 таблицы с компонентами, подобными приведенным выше.

Я создаю небольшой restful с помощью spring с выходным файлом JSON.

Я попытался выполнить выбор с помощью языка HQL, чтобы отфильтровать 1 строку для статьи ‘046’.

Выходной 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"
            }
        ]
    }
]
  

Комментарии:

1. Вы возвращаете строку для объекта Prelievo, поэтому под ней есть список, представленный 3 строками righteprelievo. Может быть, вы можете вернуть righePrelievo в свой список полей выбора

2. Я пишу это: @JsonIgnore @OneToMany(mappedBy = «prelievo») закрытый список<RighePrelievo> righePrelievo = новый список массивов<>();

3. Я добавил @JsonIgnore и теперь все работает нормально.