如何使用wso2dss3.0.1在表中存储UUID

时间:2013-11-15 09:20:26

标签: postgresql wso2 wso2esb wso2dss

我正在使用wso2dss3.0.1并使用POSTGRESSQL数据库,因此我的数据库中有表格,如

        uuid table
    ========================
    column name | datatype
----------------------------------
        uuid    | uuid
       deviceid | bigint
      objectid  | bigint
        message | string

所以我希望使用wso2dss插入数据但是它无法插入并且它给出了这样的错误

</soapenv:Text>
   </soapenv:Reason>
   <soapenv:Detail>
      <axis2ns1:DataServiceFault xmlns:axis2ns1="http://ws.wso2.org/dataservice">DS Fault Message: Error in DS non result invoke.
DS Code: DATABASE_ERROR
Nested Exception:-
javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'SQLQuery.processNormalQuery'
DS Code: DATABASE_ERROR
Source Data Service:-
Name: taction_DataService
Location: /taction_DataService.dbs
Description: N/A
Default Namespace: http://ws.wso2.org/dataservice
Current Request Name: insertinto_seenuuid_op
Current Params: {uuid=a0eebc999c0b4ef8bb6d6bb9bd380a11, objectid=-1, deviceid=-1}
Nested Exception:-
org.postgresql.util.PSQLException: ERROR: column "uuid" is of type uuid but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 53

</axis2ns1:DataServiceFault>
   </soapenv:Detail>
</soapenv:Fault>

现在我的问题是我的数据库列类型是修复我无法改变它如何使用wso2dss将其发送到数据库如果它可能在DSS查询参数中可以使用哪种类型的数据类型,因为没有UUID类型 是通过DSS发送UUID的任何方式

1 个答案:

答案 0 :(得分:1)

正如评论所示,将列转换为UUID是可行的方法。

然而,深入挖掘,我想知道wso2dss在这里做了什么。通常,列以UNKNOWN类型的形式出现,然后根据需要拉入。为了以varchar()的形式出现,ws0dss必须在查询执行期间指定它。所以看起来你正在做类似"uuid"::varchar()::uuid的事情,这在我看来有点像问题。

所以当你有一个解决方法时,我认为就是这样。真正的问题是如何让wso2dss使用自定义数据类型。我希望我有一个答案,但我认为它可能需要一些自定义代码。