NativeQuery неизвестный столбец в списке полей - PullRequest
0 голосов
/ 25 августа 2018
@Query(value = "SELECT r FROM Reservation r WHERE r.reservationSeance.id=:seanceId " +
            "AND r.seanceDate=:seanceDate " +
            "order by r.id DESC LIMIT 1", nativeQuery = true)
public Reservation findReservationBySeanceDateAndSeanceId(@Param("seanceId") int seanceId, @Param("seanceDate") java.time.LocalDate seanceDate);

Без nativeQuery в качестве параметра у меня есть ошибка ',' или ожидалось значение NULL, получен LIMIT stackoverflow, но при его использовании и значении true у меня ошибка

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'r' in 'field list'

EDIT: Сущность, использованная в запросе

@Entity
@Table(name="reservation")
@Data
@NoArgsConstructor
public class Reservation {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, unique = true)
    private Integer id;

    private java.time.LocalDate reservationDate;
    private java.time.LocalDate seanceDate;

    private Integer reservationNr;

    @ManyToOne(fetch = FetchType.LAZY)
    private Seance reservationSeance;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
    @JoinColumn(name = "user_id")
    private User userReservation;

    @OneToMany(orphanRemoval = true, cascade = CascadeType.MERGE)
    private List<Seat> seats = new ArrayList<>();
}

Сеанс Сущность

@Entity
@Table(name="seance")
@Data
public class Seance {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, unique = true)
    private Integer id;

    private java.time.LocalTime displayTime;

    @ManyToOne
    private Film film;

    @Column(length=127)
    private String kind;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
    private Hall hall;

    @OneToMany(mappedBy = "reservationSeance")
    @JsonIgnore
    private List<Reservation> reservations = new ArrayList<>();
}

другой день я hvae @JoinColumn покупка через несколько дней, я удаляю эту аннотацию

1 Ответ

0 голосов
/ 25 августа 2018
@Query(value = "SELECT * FROM Reservation r WHERE **r.reservationSeanceId**=:seanceId " +
            "AND r.seanceDate=:seanceDate " +
            "order by r.id DESC LIMIT 1", nativeQuery = true)
public Reservation findReservationBySeanceDateAndSeanceId(@Param("seanceId") int seanceId, @Param("seanceDate") java.time.LocalDate seanceDate);

Я думаю, что это должно быть что-то вроде выше. Проблема возникает, потому что вы пытаетесь использовать псевдоним r , затем имя поля servationSeance , а затем также имя поля id . Это не правильно.

Пожалуйста, предоставьте свою таблицу, чтобы получить больше информации о вашей проблеме. Я могу предположить, что r.reservationSeance.id это fk, и в этом случае вам следует использовать полное имя fk, которое было указано в вашей аннотации @JoinColumn name.

Обновлены.

Пожалуйста, взгляните на класс бронирования или сеанса, там будет аннотация отношений. Где вы использовали @OneToMany например, тогда должно быть @JoinColumn name = 'your_fk_name' И затем, пожалуйста, вставьте это имя fk_name для запроса вместо r.reservationSeance.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...