我根据日期间隔和房间类型创建了查询以搜索酒店中的可用房间。 运行此查询时,我收到以下错误:
org.h2.jdbc.JdbcSQLException:Schema" R"未找到; SQL语句:
关于可能出现什么问题的任何想法?
公共接口RoomRepository扩展了JpaRepository {
@Query(value = "
SELECT Room r
FROM Room join r.bookings b
WHERE not ((b.beginDate >= :initDate And b.beginDate <= :endDate) 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)
public List<Room> findWithDates(@Param("initDate") Date initDate, @Param("endDate") Date endDate, @Param("roomType") long roomType);
}
答案 0 :(得分:1)
选择房间r 从房间加入r.bookings b
您的别名不应位于选择语句
中SELECT r FROM Room r ..........
另外,你真的不需要&#34;选择&#34;如果你选择了一切。
来自Room r ...
应该够了
答案 1 :(得分:1)
如果使用本机查询,则不应使用命名参数。模式“R”是生成的SQL中表名的前缀。模式前缀通常添加到与数据库连接中的URL参数指定的表中。在您的情况下,它是不同的,因为您没有使用任何架构连接。要使用本机SQL查询,您应该使用@NamedNativeQuery
之类的
@NamedNativeQuery
原生查询是通过
@NamedNativeQuer
y和定义的@NamedNativeQueries
注释或<named-native-query>
XML 元件。
@NamedNativeQuery(
name="complexQuery",
query="SELECT Room r
FROM Room join r.bookings b
WHERE not ((b.beginDate >= ? And b.beginDate <= ?) or (b.beginDate >= ? And b.endDate <= ?) or (b.beginDate <= ? and b.endDate >= ?) and b.approved = true and r.roomType = ?)",
resultClass=Room.class
)
public class Romm { ... }
Query query = em.createNamedQuery("complexQuery", Room.class);
query.setParameter(1, initDate);
query.setParameter(2, endDate);
query.setParameter(3, initDate );
query.setParameter(4, endDate);
query.setParameter(5, initDate );
query.setParameter(6, endDate);
query.setParameter(7, roomType);
Room room = (Room) query.getSingleResult();
中找到更多示例