Java 使用jooq更新hstore字段

Java 使用jooq更新hstore字段,java,sql,postgresql,jooq,hstore,Java,Sql,Postgresql,Jooq,Hstore,除了执行普通sql之外,是否有人知道可以使用JOOQ通过输入hstore来更新值。 例如,我有表产品 id | characs | name ----+----------------------------------------------------------------------------+------------

除了执行普通sql之外,是否有人知道可以使用JOOQ通过输入hstore来更新值。 例如,我有表产品

 id |                                  characs                                   |         name         
----+----------------------------------------------------------------------------+--------------
  1 | "key"=>"value", "key3"=>"test2"                                            | test1    
  2 | "key"=>"value"                                                             | test3               
  3 | "keyNew"=>"valueNew"                                                       | test3               
  4 | "keyNew"=>"valueNew"                                                       | test4               
  5 | "date"=>"Dec 2012", "price"=>"500", "author"=>"Dave", "currency"=>"dollar" | test5
我想通过键key3更新值。为此,我可以执行普通sql:

UPDATE products SET name='test1New', characs=characs || '"key3"=>"value3"'::hstore where id=1

是否可以使用JOOQ的DSL

这是很有可能的,但还没有现成的支持。为了实现您自己的HSTORE支持,您需要:

1.实施 此绑定将用于数据库中的所有HSTORE列。它将负责处理用户类型
(例如
Map
)与JDBC的交互,以生成数据库类型
(例如
String
,或
PGobject

下面可以看到如何使用
JSON
类型执行此操作的示例:

HSTORE
类型的工作方式大致相同

2.通过普通SQL实现您自己的操作符 PostgreSQL有许多特定于供应商的运算符,这些运算符与特定于供应商的数据类型一起使用。这些操作符需要通过普通SQL实现。例如:

公共类扩展{
公共静态字段get(
字段(存储,字符串键){
返回DSL.field(“{0}->{1}”,String.class,hstore,DSL.val(key));
}
公共静态字段get(
字段hstore,字符串[]键){
返回DSL.field(“{0}->{1}”,字符串[].class,hstore,DSL.val(键));
}
公共静电场concat(
字段f1,
字段f2){
返回DSL.field(“{0}|{1}”,f1.getDataType(),f1,f2);
}
//等等。。。
}