Meine Frage zum Schreiben von Abfrage in jooq dsl.JOOQ: Typklasse org.jooq.impl.SelectImpl wird in Dialekt nicht unterstützt DEFAULT
Ich habe eine Liste von Client-Attributen in einer Oracle-Datenbank gespeichert.
Tabellenstruktur folgt:
CLIENT_ATTRIBUTE_DICT
(ID, CODE, DEFAULT_VALUE) - Liste aller möglichen AttributeCLIENT_ATTRIBUTE
(attribute_id, CLIENT_ID, Wert) - Attribute Werte für verschiedene Clients
Ich versuche, Werte aller vorhandenen Attribute (in dict) für einen bestimmten Client auszuwählen:
Wenn vorhanden Zeile in CLIENT_ATTRIBUTE mit bestimmten clientId als Attributwert = CLIENT_ATTRIBUTE.VALUE
sonst CLIENT_ATTRIBUTE_DICT.DEFAULT_VALUE
Meine Abfrage in SQL (funktioniert):
SELECT d.code,
NVL
(
(
SELECT value
FROM CLIENT_ATTRIBUTE a
WHERE a.ATTRIBUTE_ID = d.id
AND a.CLIENT_ID = 1
),
(
SELECT DEFAULT_VALUE
FROM CLIENT_ATTRIBUTE_DICT dd
WHERE dd.id=d.id
)
) value
FROM CLIENT_ATTRIBUTE_DICT d;
Meine Anfrage in jOOQ dsl:
ClientAttributeDictTable dict = CLIENT_ATTRIBUTE_DICT.as("d");
Map<String, String> attributes =
dsl.select(
dict.CODE,
DSL.nvl(
dsl.select(CLIENT_ATTRIBUTE.VALUE)
.from(CLIENT_ATTRIBUTE)
.where(
CLIENT_ATTRIBUTE.ATTRIBUTE_ID.eq(dict.ID),
CLIENT_ATTRIBUTE.CLIENT_ID.eq(clientId)
),
dsl.select(CLIENT_ATTRIBUTE_DICT.DEFAULT_VALUE)
.from(CLIENT_ATTRIBUTE_DICT)
.where(CLIENT_ATTRIBUTE_DICT.ID.eq(dict.ID))
).as("value")
).from(dict)
.fetchMap(String.class, String.class);
Wenn jOOQ Abfrage läuft es schlägt mit Fehlermeldung:
verursacht durch: Typ Klasse org.jooq.i mpl.SelectImpl ist nicht im Dialekt STANDARD unterstützt
bei org.jooq.impl.DefaultDataType.getDataType (DefaultDataType.java:757) ~ [na: na]
bei org.jooq.impl.DefaultDataType.getDataType (DefaultDataType.java:704) ~ [na: na]
bei org.jooq.impl.DSL.getDataType (DSL.java:14378) ~ [na: na]
bei org.jooq.impl.DSL.val (DSL.java:12766) ~ [na: na]
bei org.jooq.impl.Utils.field (Utils.java:802) ~ [na: na]
bei org.jooq.impl.DSL.nvl (DSL.java:8403) ~ [na: na]
Was mache ich falsch?
UPD jOOQ Version 3.7.2
können Sie den vollständigen Stack-Trace (oder zumindest die relevanten Teile) Paste fixiert werden, um zu sehen, wo die Ausnahme ausgelöst wird? Auch: Welche jOOQ-Version verwendest du? –
Hallo, Lukas! Ich habe meine Frage aktualisiert. –