java - 具有数据库功能的 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
在这种情况下),它可以作为参数传递,其他所有内容都是任何行的标准样板。重复其他类型,如点、多边形等。