I'm trying to use master data tables in jOOQ 1.6.1 with PostgreSQL. I
know i can use real ENUMs, but i prefer a table because some of the
value lists are quite long and ENUMs are a bit hard to maintain in
PostgreSQL - you have to drop & re-create them every time you want to
add a value.
My master data config:
----------------------------------------------------------------------------------------------------------------------------------------------------------
generator.generate.master-data-tables=unit
generator.generate.master-data-table-literal.unit=name
generator.generate.master-data-table-description.unit=description
----------------------------------------------------------------------------------------------------------------------------------------------------------
When i use a master table that has a varchar as primary key (it's the
actual "literal" field), i get:
----------------------------------------------------------------------------------------------------------------------------------------------------------
ERROR - DefaultGenerator - Exception while generating master
data table unit
java.lang.RuntimeException: org.postgresql.util.PSQLException: Bad
value for type int : euro
at org.jooq.impl.CursorImpl$CursorIterator.next(CursorImpl.java:164)
at org.jooq.impl.CursorImpl$CursorIterator.next(CursorImpl.java:127)
at org.jooq.impl.CursorImpl.fetch(CursorImpl.java:119)
at
org.jooq.impl.AbstractResultProviderQuery.execute(AbstractResultProviderQuery.java:
74)
at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:103)
at
org.jooq.impl.AbstractResultProviderQuery.fetch(AbstractResultProviderQuery.java:
96)
at
org.jooq.impl.AbstractDelegatingResultProviderQuery.fetch(AbstractDelegatingResultProviderQuery.java:
98)
at
org.jooq.util.DefaultMasterDataTableDefinition.getData(DefaultMasterDataTableDefinition.java:
92)
at org.jooq.util.DefaultGenerator.generate(DefaultGenerator.java:342)
at org.jooq.util.GenerationTool.main(GenerationTool.java:142)
at org.jooq.util.GenerationTool.main(GenerationTool.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:283)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.postgresql.util.PSQLException: Bad value for type int :
euro
at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:
2759)
at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:
2003)
at
org.jooq.impl.FieldTypeHelper.getFromResultSet(FieldTypeHelper.java:
417)
at
org.jooq.impl.FieldTypeHelper.getFromResultSet(FieldTypeHelper.java:
366)
at org.jooq.impl.CursorImpl$CursorIterator.setValue(CursorImpl.java:
201)
at org.jooq.impl.CursorImpl$CursorIterator.fetch(CursorImpl.java:186)
at org.jooq.impl.CursorImpl$CursorIterator.next(CursorImpl.java:162)
... 16 more
----------------------------------------------------------------------------------------------------------------------------------------------------------
When i add a separate integer column to the table and make that the
primary key, code generation completes without errors, but the
resulting code doesn't work:
----------------------------------------------------------------------------------------------------------------------------------------------------------
public enum Unit implements MasterDataType<Integer> {
/**
* uur-description
*/
uur(4, "uur", "uur-description"),
<...>
private final String name;
private final String description;
private final Integer id;
private Unit(String name, String description, Integer id) {
this.name = name;
this.description = description;
this.id = id;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------
error: constructor Unit in enum nl.seeas.bite.db.enums.Unit cannot be
applied to given types;
required: java.lang.String,java.lang.String,java.lang.Integer
found: int,java.lang.String,java.lang.String
reason: actual argument int cannot be converted to java.lang.String
by method invocation conversion
----------------------------------------------------------------------------------------------------------------------------------------------------------
Am i doing something wrong or is this broken in jOOQ-codegen?