OpenJPA:JPQL 与本机查询
Posted
技术标签:
【中文标题】OpenJPA:JPQL 与本机查询【英文标题】:OpenJPA:JPQL vs native query 【发布时间】:2016-03-20 02:52:16 【问题描述】:我在工作中使用 OpenJPA。 有时我必须使用 JPQL,有时我必须使用本机查询(em.createNativQuery)。
我正在目睹原生查询的一个大问题。我也必须提供架构名称。
喜欢 JPQL 我可以写:
em.createQuery("Select e from Entity_name e").getResultList();
但如果是本地查询,我需要这样做:
em.createNativeQuery("Select e from SCHEMANAME.Table_name e").getResultList()
为什么会这样?这不是错误的行为,因为模式名称可能会随时间变化。
【问题讨论】:
【参考方案1】:尝试在您的配置中指定以下属性。
<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 - 结果实例的类
希望这会有所帮助。
【讨论】:
@Mandroid :您是否尝试按照我的答案的示例中所示传递实例类? 嗨 Tharindu,我没有那样做。其实我的SQL字符串有2个不同的表,这种情况怎么处理? @Mandroid :我已经更新了答案。实体应该是结果对应的实体。 @Mandroid:对你有用吗?你是怎么解决的?以上是关于OpenJPA:JPQL 与本机查询的主要内容,如果未能解决你的问题,请参考以下文章
在 OpenJPA 中使用 inet postgres 数据类型
OpenJPA - 实例的 id 字段在查询时返回 null