0

我在工作中使用 OpenJPA。有时我必须使用 JPQL,有时我必须使用本机查询(em.createNativQuery)。

我目睹了本机查询的一个大问题。我也必须提供架构名称。

就像 JPQL 我可以写:

em.createQuery("Select e from Entity_name e").getResultList();

但在本机查询的情况下,我需要这样做:

em.createNativeQuery("Select e from SCHEMANAME.Table_name e").getResultList()

为什么会这样?这不是错误的行为,因为模式名称可能会随时间而变化。

4

1 回答 1

0

尝试在您的配置中指定以下属性。

<property name="openjpa.jdbc.Schema" value="SCHEMANAME"/>

如果您同时使用 JPQL 和本机查询,请尝试按如下方式添加实际实体。

例如 Query query = em.createNativeQuery("SELECT * FROM MAG", Magazine.class);

否则您可能会面临数据不一致问题,例如脏读、丢失更新等

更新

Query createNativeQuery(java.lang.String sqlString,
                        java.lang.Class resultClass)

创建 Query 实例以执行本机 SQL 查询。

参数: sqlString - 本机 SQL 查询字符串

resultClass - 结果实例的类

希望这可以帮助。

于 2015-12-14T16:04:27.563 回答