首页 > 解决方案 > 具有数据库功能的 Hibernate 自定义基本类型

问题描述

我正在制作一个自定义 Hibernate 类型,AbstractSingleColumnStandardBasicType用于自动将 SQL UDT 转换为 Java 类型。SQL 使用数据库函数来构造和序列化来自 BLOB 和/或 CLOB 的列数据,我想对用户隐藏它。所以他们不必@ColumnTransformer(read="_serializer(column_name)", write="_constructor(?)")为每一列都使用。

我已经使用 BLOBSqlTypeDescriptor和自定义类型创建了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在这种情况下),它可以作为参数传递,其他所有内容都是任何行的标准样板。重复其他类型,如点、多边形等。

标签: javahibernatejdbcuser-defined-types

解决方案


推荐阅读