Spring Hibernate: получить список объектов из отношения «многие ко многим» - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть две сущности в моем приложении Spring-Boot, которые находятся во многих отношениях.У меня проблема с получением tipoviPlacanja (список объектов TipPlacanja) из определенных Casopis .

Casopis.java

@Entity
public class Casopis {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    @Column
    private String merchantId;

    @Column
    private String merchantPassword;

    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "casopis")
    public Racun racun;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name = "casopis_tipovi_placanja", 
        joinColumns = { @JoinColumn(name = "merchant_id") }, 
        inverseJoinColumns = { @JoinColumn(name = "tip_placanja_id") }
    )
    Set<TipPlacanja> tipoviPlacanja = new HashSet<>();


    public Casopis() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Casopis(String merchantId, String merchantPassword, Racun racun, Set<TipPlacanja> tipoviPlacanja) {
        super();
        this.merchantId = merchantId;
        this.merchantPassword = merchantPassword;
        this.racun = racun;
        this.tipoviPlacanja = tipoviPlacanja;
    }

    public Set<TipPlacanja> getTipoviPlacanja() {
        return tipoviPlacanja;
    }

    public void setTipoviPlacanja(Set<TipPlacanja> tipoviPlacanja) {
        this.tipoviPlacanja = tipoviPlacanja;
    }

}

и

TipoviPlacanja.java

@Entity
public class TipPlacanja {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String naziv;

    @ManyToMany(mappedBy = "tipoviPlacanja")
    private Set<Casopis> casopisi = new HashSet<>();

    public TipPlacanja() {
    }

    public TipPlacanja(Long id, String naziv) {
        super();
        this.id = id;
        this.naziv = naziv;
    }

}

My data.sql выглядит так:

insert into tip_placanja(id, naziv) values (1, 'paypal');
insert into tip_placanja(id, naziv) values (2, 'kartica');
insert into tip_placanja(id, naziv) values (3, 'bitcoin');

insert into casopis(merchant_id, merchant_password) values ('22', 'bbbb');
insert into casopis(merchant_id, merchant_password) values ('11', 'aaaa');
insert into casopis_tipovi_placanja(merchant_id, tip_placanja_id) values ('11', 1);
insert into casopis_tipovi_placanja(merchant_id, tip_placanja_id) values ('11', 2);
insert into casopis_tipovi_placanja(merchant_id, tip_placanja_id) values ('11', 3);

insert into casopis_tipovi_placanja(merchant_id, tip_placanja_id) values ('22', 1);
insert into casopis_tipovi_placanja(merchant_id, tip_placanja_id) values ('22', 2);

Iмогу поклясться, что он работал только с

casopisRepository.findByMerchantId(id).getTipoviPlacanja();

, но теперь возвращает только список emtpy.

Я прочитал много других похожих вопросов и прочитал некоторые учебные статьи о многихto-many, но ничего.

Я пытался с запросом в хранилище TipPlacanja, но тоже ничего.

@Query("SELECT tp FROM TipPlacanja tp JOIN tp.casopisi c WHERE c.merchantId = ?1")
    public Set<TipPlacanja> findBlaBla(String id);

Я пытался с вводом запроса непосредственно в MySQL Workbench, и он работает нормально, он возвращаетидентификаторы всех типовиПлакания от конкретных Casopis .

select tp.id from tip_placanja tp
inner join casopis_tipovi_placanja ctp on tp.id = ctp.tip_placanja_id
inner join casopis c on ctp.merchant_id = c.merchant_id
where c.merchant_id = '22';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...