将 Hibernate 升级到 6.1 - 如何指定 @Type(type="text") 的等效项?

问题描述 投票:0回答:4

我们当前使用 Hibernate 5.6,但正在尝试升级到 Hibernate 6.1。在一个实体中,我们具有以下属性:

@Type(type = "text")
private String someText;

但在 Hibernate 6.1 中,

type
注释中的
@Type
字段被删除。现在
@Type
注释定义如下:

@java.lang.annotation.Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Type {

    /**
     * The implementation class which implements {@link UserType}.
     */
    Class<? extends UserType<?>> value();

    /**
     * Parameters to be injected into the custom type after it is
     * instantiated. The {@link UserType} implementation must implement
     * {@link org.hibernate.usertype.ParameterizedType} to receive the
     * parameters.
     */
    Parameter[] parameters() default {};
}

问题:Hibernate 6.1 中的

@Type(type = "text")
相当于什么?

java hibernate
4个回答
7
投票

基于 Hibernate 5.0 文档 - 对于

text
BasicTypeRegistry 键对应于
LONGVARCHAR
Jdbc 类型。

Hibernate 6.1.5 文档中提供了使用

@JdbcTypeCode
注释的选项:

@JdbcTypeCode(Types.LONGVARCHAR)
private String text;

2
投票

Georgii Lvov 的回答非常好。我想补充一点,还有一个替代方案:

@JdbcType(LongVarcharJdbcType.class)

几乎与

@JdbcTypeCode(Types.LONGVARCHAR)
同义。我想,你使用哪一个有点品味问题。


0
投票

我不知道在 Hibernate 6+ 中使用

@Type
的正确语法,但作为解决方法,您可以尝试使用
@Column
注释:

@Column(columnDefinition="TEXT")
private String someText;

0
投票

来自 https://docs.jboss.org/hibernate/orm/6.0/userguide/html_single/Hibernate_User_Guide.html#basic-type-annotation

UserTypeLegacyBridge
提供了一种使用遗留命名类型的方法:

@Type(value = UserTypeLegacyBridge.class, parameters = @Parameter(name = UserTypeLegacyBridge.TYPE_NAME_PARAM_KEY, value = "text"))
private String someText;
© www.soinside.com 2019 - 2024. All rights reserved.