2017-10-08 2 views
0

Lors de l'utilisation JPA, on peut soit utiliser JPQL ou "SQL native" pour écrire des requêtes:est-JPA "SQL natif" indépendant du SGBD sous-jacents

exemple JPQL:

interface TodoRepository extends Repository<Todo, Long> { 

    @Query("SELECT t FROM Todo t WHERE t.title = 'title'") 
    public List<Todo> findByTitle(); 
} 

Exemple SQL:

interface TodoRepository extends Repository<Todo, Long> { 

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

JPQL est évidemment indépendant de la base de données sous-jacente (Oracle, MySQL, etc.) Ma question est: est le SQL également indépendant de la base de données sous-jacente? En d'autres termes, est-ce que ce SQL est une forme de SQL "neutre" qui est ensuite traduit dans un dialecte SQL spécifique (un tel dialecte MySQL)?

Répondre

0

Une "requête native" JPA est SQL. Et SQL varie d'un SGBDR à l'autre. Vous êtes totalement en fonction de la base de données lorsque vous utilisez des "requêtes natives". Donc, vous devriez toujours essayer d'utiliser JPQL dans la mesure du possible.

Il n'y a pas de formulaire neutre. Évidemment, si tous les fournisseurs de SGBDR bloquaient pour planifier ANSI SQL et prenaient en charge la même syntaxe, tout serait simple, mais ce n'est pas le cas, et ce n'est pas le cas