JPA: внешний ключ как параметр в NamedQuery - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь вернуть Raadpleging объекты из моей БД. Эти объекты содержат Persoon и Les. Моя цель - вернуть всех Raadplegingen, где идентификатор Les равен параметру.

Я не уверен, как это сделать в моем запросе. Я также не уверен, вернет ли мой первый namedQuery свойство Persoon и Les или мне для этого понадобится объединение.

Как вы можете видеть ниже, я попытался использовать параметр, подобный этому WHERE r.les = :lesId, что, я думаю, неверно.

@Entity
@Access(AccessType.PROPERTY)
@Table(name = "Raadplegingen")
@NamedQueries({
    @NamedQuery(name = "ClubRaadpleging.getAlleRaadplegingen",
            query = "SELECT r FROM ClubRaadpleging r"),
    @NamedQuery(name = "ClubRaadpleging.findByLes",
            query = "SELECT r FROM ClubRaadpleging r JOIN ClubLes l ON l.id =r.les.id WHERE r.les  = :lesId")
})
public class ClubRaadpleging implements Serializable {

    private int id;
    private ClubLes les;
    private ClubPersoon persoon;
    private Date datum;

    public ClubRaadpleging() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "RaadplegingId")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "LesId")
    public ClubLes getLes() {
        return les;
    }

    public void setLes(ClubLes les) {
        this.les = les;
    }

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "PersoonId")
    public ClubPersoon getPersoon() {
        return persoon;
    }

    public void setPersoon(ClubPersoon persoon) {
        this.persoon = persoon;
    }

    @Temporal(TemporalType.DATE)
    public Date getDatum() {
        return datum;
    }

    public void setDatum(Date datum) {
        this.datum = datum;
    }

}


1 Ответ

1 голос
/ 17 мая 2019

Нет необходимости объединяться между ClubRaadpleging и ClubLes. Сам JPA уже выполняет эту работу, согласно отображению сущности.

Вы можете попытаться упростить NamedQuery следующим образом:

@Entity
@Access(AccessType.PROPERTY)
@Table(name = "Raadplegingen")
@NamedQueries({
    @NamedQuery(name = "ClubRaadpleging.getAlleRaadplegingen",
            query = "SELECT r FROM ClubRaadpleging r"),
    @NamedQuery(name = "ClubRaadpleging.findByLes",
            query = "SELECT r FROM ClubRaadpleging r WHERE r.les.id  = :lesId")
})
public class ClubRaadpleging implements Serializable {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...