- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Spring 4 应用程序中使用 jOOQ 3.8.4 和 PostgreSQL 9.5。我有下表和类型定义
CREATE DOMAIN shop.money_amount AS numeric(6,2) DEFAULT 0 NOT NULL CHECK (value > 0::numeric);
CREATE TYPE shop.money AS (
m_amount shop.money_amount,
m_currency shop.currency,
m_country shop.site_country
);
CREATE TYPE shop.money_mapping AS (
mm_moneys shop.money []
);
CREATE TABLE shop.article
(
a_id bigserial NOT NULL,
a_price shop.money_mapping NOT NULL,
CONSTRAINT a_pk_id PRIMARY KEY (a_id)
);
然后我尝试使用 jOOQ 进行插入,即:
MoneyMappingRecord priceMoneyMapping = new MoneyMappingRecord();
priceMoneyMapping.setMoneys(new MoneyRecord[]{
new MoneyRecord().setAmount(new BigDecimal("11")).setCountry(SiteCountry.US).setCurrency(Currency.USD),
new MoneyRecord().setAmount(new BigDecimal("14")).setCountry(SiteCountry.DE).setCurrency(Currency.EUR)
});
dsl.insertInto(ARTICLE)
.set(ARTICLE.A_PRICE, priceMoneyMapping)
.returning(ARTICLE.A_ID).fetchOne().getId();
然后我得到:
Caused by: org.springframework.jdbc.BadSqlGrammarException: jOOQ;
bad SQL grammar [insert into "shop"."article" ("a_price") values
(row(?::money[])) returning "shop"."article"."a_id"]; nested
exception is org.postgresql.util.PSQLException:
ERROR: cannot cast type record to shop.money_mapping
Detail: Cannot cast type money[] to shop.money[] in column 1.
我做错了什么?
更新
我尝试按照 Lukas 的建议重命名 shop.money 类型(从 shop.money
到 shop.localized_money
),但我认为问题与模式。查看更新后的错误。
Caused by: org.springframework.jdbc.BadSqlGrammarException:
jOOQ; bad SQL grammar [insert into "shop"."article" ("a_price")
values (row(?::localized_money[])) returning "shop"."article"."a_id"]; nested exception is
org.postgresql.util.PSQLException: ERROR: type "localized_money[]" does not exist
也许类型中的类型有问题!
最佳答案
在 jOOQ 3.8 中似乎存在与类型嵌套数组转换相关的问题。我为此创建了一个问题:https://github.com/jOOQ/jOOQ/issues/5571
问题是您的自定义类型数组类型在绑定(bind)为绑定(bind)变量时需要完全限定。如果它不是完全限定的,则 PostgreSQL 找不到该类型。此问题中描述了一种可能的解决方法:Permanently Set Postgresql Schema Path
您可以在用户的搜索路径上添加 shop
架构:
ALTER ROLE <your_login_role> SET search_path TO shop;
... 这意味着 shop
模式中的元素不再需要完全限定。这也可能是一件坏事,所以要小心! :)
关于java - JOOQ 插入式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39646870/
我每天看到无数关于“如何用正则表达式做 X”的帖子。对他们中的大多数人来说,最好的回应似乎是老实说,“你为什么要用锤子敲螺丝?”但是正则表达式无处不在,而且语法大多是可移植的,特别是如果你远离花哨的部
我在 Spring 4 应用程序中使用 jOOQ 3.8.4 和 PostgreSQL 9.5。我有下表和类型定义 CREATE DOMAIN shop.money_amount AS numeri
我是一名优秀的程序员,十分优秀!