java - 如何在 Hibernate ORM 中将“lo”别名为“oid”?
问题描述
在 Postgres 10 中,我将该lo
模块用于我的大对象字段。这将创建一个自定义类型lo
,它是oid
. 但是,我无法弄清楚如何让 Hibernate 5.3 知道这一点。
CREATE EXTENSION lo;
CREATE TABLE foo (
bigserial id PRIMARY KEY,
bar lo
);
@lombok.Data
@javax.persistence.Entity
public class Foo {
@javax.persistence.Id
private long id;
@javax.persistence.Lob
private java.sql.Blob bar;
}
org.hibernate.tool.schema.spi.SchemaManagementException:模式验证:在表 [foo] 的列 [bar] 中遇到错误的列类型;找到 [lo (Types#DISTINCT)],但期待 [oid (Types#BLOB)]
解决方案
您可以使用自定义方言来执行此操作,但这需要手动指定它而不是允许自动检测。
package com.example
public class CustomDialect extends PostgreSQL95Dialect {
public CustomDialect () {
this.registerColumnType(Types.BLOB, "lo");
}
}
hibernate.dialect=com.example.CustomDialect
如果类型是模式限定的而不是依赖于搜索路径,这会变得更加复杂。您将需要注册,例如"\"public\".\"lo\""
您可以使用自定义DialectResolver
来仅替换检测到的 postgres 方言,但如果您想支持多个版本,您将需要很多类:CustomPostgreSQL95Dialect
、CustomPostgreSQL94Dialect
等。
package com.example
public class CustomDialectResolver extends BasicDialectResolver {
public CustomDialectResolver() {
super("PostgreSQL", CustomDialect.class);
}
}
hibernate.dialect_resolvers=com.example.CustomDialectResolver
推荐阅读
- javascript - Puppeteer Sharp:加载内容时设置假路径?
- go - Golang改变指针接口的类型
- ruby-on-rails - 使用 react 和 rails 上传图片
- r - 如何向 sjmisc::frq(out = "v") 添加标题
- javascript - 如何在画布中查找填充文本的起点和终点
- r - 根据 R 中的两个列 ID 选择的因子水平对数据进行子集化
- deep-learning - 两层网络上的反向传播
- google-chrome - 删除存储在“使用 Google Smarts 进行 Web 浏览”下的用户
- reactivesearch - 来自 Reactivesearch 的 DataSearch 左对齐自动完成建议
- javascript - onClick 仅适用于其他所有人