打开JPA ResultSet映射

时间:2016-02-25 15:47:36

标签: jpa sqlresultsetmapping

我有一个名为order的实体,它包含10列,并且还有嵌入式id(复合键)列,其中包含实体顺序中的5个字段。

这是我的SQL查询

<named-native-query name="OrderQuery" result-set-mapping="OrderQueryResultSetMapping">
  <query>
    <![CDATA[SELECT t0.colum2, t0.column4, to.embededid.colum3, e mbededid.colum1, FROM order  t0 WHERE t0.orderid = ?1 ]]>
  </query>
</named-native-query>

我试图在orm.xml

中构建sql resultsetmapping
<sql-result-set-mapping name="OrderQueryResultSetMapping">
  <entity-result entity-class="order">
    <field-result name="column2" column="column_2" />
    <field-result name="column4" column="column_4" />
  </entity-result>
  <entity-result entity-class="orderembededId">
    <field-result name="column3" column="column_3" />
    <field-result name="column4"1column="column_1" />
  </entity-result>
</sql-result-set-mapping>

我在查询执行方面没有问题,但在sqlResultSetMapping中收到错误。我收到了以下错误。

Exception in thread "main" <openjpa-2.4.0-r422266:1674604 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: [jcc][t4][10145][10897]
[3.58.81] Invalid parameter 0: Parameter index is out of range. ERRORCODE=-4461, SQLSTATE=42815

我们可以做这种映射吗?如果是这样,客户端如何知道作为此查询的一部分为Order实体填充的列是什么?

1 个答案:

答案 0 :(得分:0)

好的,你可能已经自己想出来了,但你的查询中有一些拼写错误:

  • to.embededid.colum3可能应该是to.embededid.column3(无论如何,这都是您在地图中调用的内容,否则您应该在地图中更改它。)
  • 您的SELECT在FROM之前以逗号结束,这不是有效的SQL。
  • 您的映射有name="column4"1column="column_1",1不应该在那里。