在Hibernate 6中,@JdbcTypeCode和@JdbcType有什么区别?

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

这个答案在将 VARCHAR 类型映射到 UUID 类时推荐两个选项:

@Id @GeneratedValue
@JdbcTypeCode(Types.VARCHAR)
private UUID id;

和:

@Id @GeneratedValue
@JdbcType(VarcharJdbcType.class)
private UUID id;

@JdbcTypeCode
@JdbcType
注释有什么区别?

我阅读了两个注释的javadoc(12),但无法找出其中的区别。我知道它们都用于在数据库类型和 Java 类型之间进行映射,但是我想知道在哪种情况下应该使用其中一种。

java hibernate jpa jdbc
1个回答
0
投票

我读了javadoc

好。 然而,在这种情况下,单独使用 JavaDoc 就有点敷衍了。 应该在 Hibernate 的散文文档的上下文中理解它们。特别是,其映射“基本”类型的模型是相关的。 这解释了 Hibernate 维护了对应于单个列的持久 Java 属性类型的三种(!)不同含义:一个 Hibernate 类型,它对应于代表 Java 端特性的 java 类型JDBC类型代表对应的JDBC对象的特征。

我知道它们都是用于数据库类型和Java类型之间的映射

不完全是。

@JdbcType
注释显式地将特定
JdbcType
实现与持久属性相关联。
@JdbcTypeCode
注释显式关联表示
JdbcType
实现的整数代码。 这两个选项都专门针对映射的 JDBC 端。

映射的 Java 端是独立的。 在大多数情况下,它可以从 Java 数据类型隐式确定,但也可以通过

@JavaType
注释显式指定。

我想知道在哪种情况下应该使用其中一种。

当你可以用两种方式表达你想要的东西时,一种与另一种一样好。 当没有您想要的 JDBC 类型代码时,需要

@JdbcType
。 特别是,
@JdbcType
允许您指定自定义
JdbcType
实现类,尽管需要这样做的情况并不常见。 您可以从
JDBCType
获取 JDBC 类型代码(实际上是几个),所以这更通用。

© www.soinside.com 2019 - 2024. All rights reserved.