我应该更喜欢使用 JPA - 纯 SQL 或 JPQL 以及如何 create/delete table 使用 JPQL 和实体

What should I prefer using JPA - pure SQL or JPQL and how to create/delete table using JPQL and Entity

我在 DAO[=53 中使用 entityManager =].

为了创建table,我正在使用:

String CREATE_TABLE = "CREATE TABLE if not exists cats (name varchar(255) PRIMARY KEY NOT NULL, age int NOT NULL);

删除 table 我正在使用:

String DELETE_TABLE = "DROP TABLE examples";

执行我正在使用:

entityManager.createNativeQuery(sql).executeQuery();

我如何使用 JPQL[= 做 相同的 53=](如果需要,我有一个 @Entity)?

我应该选择哪种方法 - createNativeQuery() +SQL createQuery() +JPQL?

您不能像 jpql specification 所说的那样创建 table。到查询的时候看情况。

Jpql优势:

  1. Jpql 利用映射(惰性/急切加载、关系)——它使用您已经定义的内容。在 SQL 中,您必须以某种方式映射结果。
  2. 查询可以存储在缓存中以提供更好的性能。
  3. 持久性上下文不需要在查询之前刷新。
  4. 您可以使用IDE 更改实体的名称以及查询。它们更易于维护。
  5. DBMS 不可知 - 你可以随时更改数据库,它会工作(这也可能是一个缺点 - 语法受 sql 标准限制)。

SQL优点:

  1. 您可以使用供应商特定的方言,它克服了 jpql 验证的缺点。
  2. 支持 DML 操作,例如裁剪或创建 table。还有索引和分区。
  3. 您可以更好地控制对数据库的查询。

总结一下:除非您需要供应商特定的查询来简化实施 and/or 提高性能,否则应该选择 jpql。架构建模不应在运行时完成。