JPA "native SQL"是否独立于底层 DBMS



使用 JPA 时,可以使用 JPQL 或"本机 SQL"来编写查询:

JPQL 示例:

interface TodoRepository extends Repository<Todo, Long> {
    @Query("SELECT t FROM Todo t WHERE t.title = 'title'")
    public List<Todo> findByTitle();
}

SQL示例:

interface TodoRepository extends Repository<Todo, Long> {
    @Query(value = "SELECT * FROM todos t WHERE t.title = 'title'", 
    nativeQuery=true)
    public List<Todo> findByTitle();
}

JPQL显然独立于底层数据库(Oracle,MySQL等)。我的问题是:SQL是否也独立于底层数据库?也就是说,这个SQL是某种形式的"中性"SQL,然后被翻译成特定的SQL方言(如MySQL方言)?

JPA"本机查询"是SQL。SQL因RDBMS而异。使用"本机查询"时,您完全依赖于数据库。因此,您应该始终尽可能努力使用 JPQL。

没有供应商中立形式。显然,如果所有RDBMS供应商都坚持计划ANSI SQL并支持相同的语法,那么一切都会很简单,但他们没有,事实并非如此。

相关内容

最新更新