#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 и теперь все работает нормально.