JPA "native SQL" 是否独立于底层 DBMS
Is JPA "native SQL" independent of the underlying DBMS
使用 JPA 时,可以使用 JPQL 或 "native 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 某种形式的 "neutral" SQL 然后被翻译成特定的 SQL 方言(例如 MySQL-方言)?
JPA "native query" 是 SQL。 SQL 因 RDBMS 而异。使用 "native queries" 时,您完全 依赖数据库 。因此,您应该始终尽可能使用 JPQL。
没有供应商中立表格。显然,如果所有 RDBMS 供应商都坚持计划 ANSI SQL 并支持相同的语法,那么一切都会很简单,但他们没有,而且事实并非如此
使用 JPA 时,可以使用 JPQL 或 "native 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 某种形式的 "neutral" SQL 然后被翻译成特定的 SQL 方言(例如 MySQL-方言)?
JPA "native query" 是 SQL。 SQL 因 RDBMS 而异。使用 "native queries" 时,您完全 依赖数据库 。因此,您应该始终尽可能使用 JPQL。
没有供应商中立表格。显然,如果所有 RDBMS 供应商都坚持计划 ANSI SQL 并支持相同的语法,那么一切都会很简单,但他们没有,而且事实并非如此