Я создаю пользовательский тип Hibernate, используя AbstractSingleColumnStandardBasicType
для автоматического преобразования SQL UDT в тип Java.SQL использует функции базы данных для создания и сериализации данных столбца из BLOB и / или CLOB, и я хочу скрыть это от пользователя.Таким образом, они не должны использовать @ColumnTransformer(read="_serializer(column_name)", write="_constructor(?)")
для каждого столбца.
Я создал типы, используя BLOB SqlTypeDescriptor
и пользовательский JavaTypeDescriptor
для преобразования на уровне JDBC, но как мне сделать так, чтобы мой пользовательский тип переносил столбец и параметры в соответствующие функции SQL?Я не нахожу ничего описывающего что-то подобное.
Редактировать: Чтобы сделать это более конкретным, этот UDT (SDE ST_GEOMETRY
) должен быть построен с помощью функций базы данных (ST_LineFromText
) или определенного конструктора UDT(ST_LineString
).Аналогично, чтобы прочитать их из базы данных, вы должны «экспортировать» их в определенный формат (ST_AsText
), чтобы Java могла их прочитать.Обычный подход чтения полей типа не работает в этом случае.
Итак:
create table geo_lines (
line SDE.ST_GEOMETRY
);
И:
@Entity
@Table(name="geo_lines")
public class GeoLine {
@Column(name="line")
@Type(type="org.example.MyStLineType")
// i'm wanting to be able to omit the following annotation
@ColumnTransformer(read="SDE.ST_AsText(line)",
write="SDE.ST_ST_LineFromText(?, 3857)")
private Polyline line;
}
Итак, все моиТипу действительно нужно от пользователя число (3857
в данном случае), которое можно передать в качестве параметра, а все остальное является стандартным шаблоном для любой строки.Повторите эти действия для других типов, таких как точки, полигоны и т. Д.