Java 创建bean时发生JPA查询错误
当我将此查询添加到我的room存储库时,我在启动Spring应用程序时开始出现错误。如果我对查询进行注释,错误将消失,应用程序将正确引导Java 创建bean时发生JPA查询错误,java,spring,spring-mvc,jpa,spring-data-jpa,Java,Spring,Spring Mvc,Jpa,Spring Data Jpa,当我将此查询添加到我的room存储库时,我在启动Spring应用程序时开始出现错误。如果我对查询进行注释,错误将消失,应用程序将正确引导 public interface RoomRepository extends JpaRepository<Room, Long> { @Query("select Room r from Room join r.bookings b where not ((b.beginDate >= :initDate And b.beginD
public interface RoomRepository extends JpaRepository<Room, Long> {
@Query("select Room r from Room join r.bookings b where not ((b.beginDate >= :initDate And b.beginDate <= :endtDate) or (b.beginDate >= :initDate And b.endDate <= :endDate) or (b.beginDate <= :initDate and b.endDate >= :endDate) and b.approved = true and r.roomType = :roomType)")
List<Room> findWithDates(@Param("initDate") Date initDate, @Param("endDate") Date endDate, @Param("roomType") long roomType);
}
房间类别:
@Entity
public class Room {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@ManyToOne
@JoinColumn( name="roomType_id" )
private RoomType roomType;
@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="room", orphanRemoval = true)
private Collection<Booking> bookings = new ArrayList<Booking>();
}
@实体
公共教室{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串名称;
@许多酮
@JoinColumn(name=“roomType\u id”)
私人房型房型;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“room”,orphan=true)
私人收藏预订=新建ArrayList();
}
您的方法名称与Spring自动实现的方法冲突(在您的示例中,Spring查找名为“initDateEndDateRoomType”的字段并失败)
Spring数据存储库基础结构中内置的查询生成器机制对于在存储库的实体上构建约束查询非常有用。该机制从方法中去除前缀find…By、read…By、query…By、count…By和get…By,并开始解析其余部分
但是,如果您也扩展了
JpaRepository
,它应该可以工作,但我还没有验证。@Query(value=“从房间加入r.bookings b中选择房间r,如果没有((b.beginDate>=:initDate和b.beginDate=:initDate和b.endDate)请让您的界面扩展JpaRepository
,它应该可以工作(如果不扩展JpaRepository,注释似乎会被忽略)。您的@Query
注释-是org.springframework.data.jpa.repository.Query
?您使用的Spring和Spring数据jpa的版本是什么?您的代码适用于我的Spring v4.0.9和Spring数据jpa v1.8.1。您可以在上找到我的示例代码。
@Query(value = "select Room r from Room join r.bookings b where not ((b.beginDate >= :initDate And b.beginDate <= :endtDate) or (b.beginDate >= :initDate And b.endDate <= :endDate) or (b.beginDate <= :initDate and b.endDate >= :endDate) and b.approved = true and r.roomType = :roomType)", nativeQuery=true)
@Query(value = "select Room r from Room join r.bookings b where not ((b.beginDate >= :initDate And b.beginDate <= :endtDate) or (b.beginDate >= :initDate And b.endDate <= :endDate) or (b.beginDate <= :initDate and b.endDate >= :endDate) and b.approved = true and r.roomType = :roomType)", nativeQuery=true)