我应该更喜欢使用 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优势:
- Jpql 利用映射(惰性/急切加载、关系)——它使用您已经定义的内容。在 SQL 中,您必须以某种方式映射结果。
- 查询可以存储在缓存中以提供更好的性能。
- 持久性上下文不需要在查询之前刷新。
- 您可以使用IDE 更改实体的名称以及查询。它们更易于维护。
- DBMS 不可知 - 你可以随时更改数据库,它会工作(这也可能是一个缺点 - 语法受 sql 标准限制)。
SQL优点:
- 您可以使用供应商特定的方言,它克服了 jpql 验证的缺点。
- 支持 DML 操作,例如裁剪或创建 table。还有索引和分区。
- 您可以更好地控制对数据库的查询。
总结一下:除非您需要供应商特定的查询来简化实施 and/or 提高性能,否则应该选择 jpql。架构建模不应在运行时完成。
我在 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优势:
- Jpql 利用映射(惰性/急切加载、关系)——它使用您已经定义的内容。在 SQL 中,您必须以某种方式映射结果。
- 查询可以存储在缓存中以提供更好的性能。
- 持久性上下文不需要在查询之前刷新。
- 您可以使用IDE 更改实体的名称以及查询。它们更易于维护。
- DBMS 不可知 - 你可以随时更改数据库,它会工作(这也可能是一个缺点 - 语法受 sql 标准限制)。
SQL优点:
- 您可以使用供应商特定的方言,它克服了 jpql 验证的缺点。
- 支持 DML 操作,例如裁剪或创建 table。还有索引和分区。
- 您可以更好地控制对数据库的查询。
总结一下:除非您需要供应商特定的查询来简化实施 and/or 提高性能,否则应该选择 jpql。架构建模不应在运行时完成。