找不到Spring JPA Query Schema

时间:2015-11-15 16:33:53

标签: java spring jpa

我根据日期间隔和房间类型创建了查询以搜索酒店中的可用房间。 运行此查询时,我收到以下错误:

  

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

2 个答案:

答案 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();

您可以在Java Persistence/Querying

中找到更多示例