나는 varchar[]
유형의 일부 열이있는 postgres 데이터베이스를 가지고 있습니다. jOOQ와 pgjdbc-ng는 멋지게 함께 연주하지 않습니다. 쿼리의 배열을 지정하는 것입니다 방법 인 "{\"value1\", \"value2\", \"etc\"}"
에 문 변수를 설정배열에 적용 할 jOOQ 변환기를 쓸 수 있습니까?
protected final BindContext bindValue0(Object value, Field<?> field) throws SQLException {
SQLDialect dialect = configuration.dialect();
// [#650] [#3108] Use the Field's Converter before actually binding any value
Converter<?, ?> converter = field.getConverter();
Class<?> type = converter.fromType();
value = ((Converter) converter).to(value);
//...
else if (type.isArray()) {
switch (dialect) {
case POSTGRES: {
stmt.setString(nextIndex(), toPGArrayString((Object[]) value));
break;
}
: jOOQ의 DefaultBindContext이의 라인을 따라 뭔가가있다. 나중에, pgjdbc-NG가 있습니다
문에 값이 두 유형 PGArray 또는 실제 배열이 될 것으로 예상하고public static Object coerceToArray(Format format, Object val, Type type, Class<?> targetType, Map<String, Class<?>> typeMap, PGConnectionImpl connection) throws SQLException {
if (val == null) {
return null;
}
else if (val instanceof PGArray) {
return coerceToArray(format, ((PGArray) val).getValue(), type, targetType, typeMap, connection);
}
else if (val.getClass().isArray()) {
return coerceToArray(format, val, 0, Array.getLength(val), type, targetType, typeMap, connection);
}
throw createCoercionException(val.getClass(), targetType);
}
; 배열의 문자열 표현을 배열의 문자열 표현으로 강제 변환하지 못합니다. :(나는 String[]
과 PGArray
사이의 변환하는 jOOQ 변환기를 작성하는 것을 시도하고있다
, 이상적으로,이 jOOQ의 DefaultBindContext 혼자 충분히 변환 된 값을 떠날 것을 의미하고 pgjdbc-ng에 그것을 처리 할 수있을 것 .. 운이없이
<customType>
<customType>
<name>StringArray</name>
<type>java.lang.String[]</type>
<converter>my.package.PGStringArrayConverter</converter>
</customType>
</customTypes>
<forcedTypes>
<forcedType>
<name>StringArray</name>
<types>varchar\[\]</types>
</forcedType>
</forcedTypes>
, 생성 된 테이블 개체를 참조하십시오 제대로
그러나, 나는 나에게이 작업을 수행 할 수있는 jOOQ 스키마 구성을 쓸 수 없었다 나는에 변화를 시도했다 a String[][]
및 varchar[]
아무것도 일치하지 않습니다. 비록 내가 그것을 무너 뜨리고, forcedType이 모든 유형에 일치하지만 <expression>
이 내 열과 일치하고 변환기 유형이 java.lang.String
인 경우에도 Java 컴파일러가 Object []를 String으로 형변환 할 수 없다는 불평을하게됩니다. [].
이 터널 끝 부분에 표시등이 있습니까? 아니면 데이터베이스 마이그레이션을 시작해야합니까?