java - NativeQuery 字段列表中的未知列

标签 java spring-data

@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作为参数,我有错误','或预期为空,得到了LIMIT stackoverflow,但是当使用它并设置为true时我有错误

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

编辑: 查询中使用的实体

@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<>();
}

有一天我会@JoinColumn 购买,过几天我会删除这个注释

最佳答案

@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,然后使用字段名称 reservationSeance,然后再使用字段名称 id。这是不正确的。

请提供您的表格以获取有关您的问题的更多信息。 我可以假设,r.reservationSeance.id 它是 fk,在这种情况下,您应该使用完整的 fk 名称,该名称在您的 @JoinColumn name 注释中指出。

已更新。

请看一下Reservation或Seance类,会有关系注释。例如,如果您使用 @OneToMany,则应为 @JoinColumn name = 'your_fk_name' 然后,请将此 fk_name 粘贴到查询中,而不是 r.reservationSeance.id。

关于java - NativeQuery 字段列表中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52019182/

相关文章:

spring - 如何使用 Spring Data JPA 根据 bool 参数包含或排除记录?

java - Eclipse 无法启动调试方式

java - 当我尝试在Android SQLite数据库中添加新值时,我的应用程序退出

java - 如何使用SwingWorker?

java - Spring Data Mongo 查询字段参数

java - 在 Couchbase 中调用删除文档(带分页)时的 Spring Data "TimeoutException"

mongodb - Spring Data mongo 按 2 个字段值的差异进行过滤

Java 枚举和 valueOf 反序列化

java - 每个项目build设置的 Eclipse

Java Couchbase JsonArray 不支持的类型