gpt4 book ai didi

java - 如何在 Hibernate ORM 中将 "lo"别名为 "oid"?

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:57 25 4
gpt4 key购买 nike

在 Postgres 10 中,我使用 lo module对于我的大对象字段。这将创建一个自定义类型 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: Schema-validation: wrong column type encountered in column [bar] in table [foo]; found [lo (Types#DISTINCT)], but expecting [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 方言,但如果您想要支持多个版本,您将需要大量类:CustomPostgreSQL95DialectCustomPostgreSQL94Dialect

package com.example

public class CustomDialectResolver extends BasicDialectResolver {
public CustomDialectResolver() {
super("PostgreSQL", CustomDialect.class);
}
}
hibernate.dialect_resolvers=com.example.CustomDialectResolver

关于java - 如何在 Hibernate ORM 中将 "lo"别名为 "oid"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com