栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为byte []设置适当的休眠注释

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为byte []设置适当的休眠注释

注释byte []属性的可移植方式是什么?

这取决于您想要什么。JPA可以保留未注释的内容

byte[]
。根据JPA 2.0规范:

11.1.6基本注释

Basic
注释是映射到数据库列的最简单的类型。所述
Basic
注释可以应用于以下任何类型的持久性或实例变量:Java原始,类型,原始类型的包装,
java.lang.String
java.math.BigInteger
java.math.BigDecimal

java.util.Date
java.util.Calendar
java.sql.Date

java.sql.Time
java.sql.Timestamp
byte[]

Byte[]
char[]
Character[]
,枚举,以及任何其他类型的器具
Serializable
。如2.8节所述,
Basic
对于这些类型的持久字段和属性,注释的使用是可选的。如果未为此类字段或属性指定基本注释,则将应用基本注释的默认值。

并且Hibernate会默认将它映射到PostgreSQL使用PostgreSQL处理的SQL

VARBINARY
(或SQL是否
LONGVARBINARY
取决于
Column
大小?)
bytea

但是,如果您希望将

byte[]
其存储在大对象中,则应使用
@Lob
。从规格:

11.1.24吊球注释

Lob
注释指定持久性属性或字段应保持为一个大型对象到数据库支持的大对象类型。可移植应用程序
Lob
在映射到数据库
Lob
类型时应使用
注释。所述
Lob
注释可以与基本注释或与一起使用
ElementCollection
的注释当元素集合值是基本类型。A
Lob
可以是二进制或字符类型。
Lob
从持久字段或属性的类型推断出类型,并且,除了字符串和字符类型外,默认为Blob。

然后Hibernate会将其映射到

BLOB
PostgreSQL使用PostgreSQL处理的SQL
oid

在某些最新的hibernate版本中已解决此问题吗?

好吧,问题是我不知道到底是什么问题。但是我至少可以说,自3.5.x分支中的3.5.0-Beta-2(已引入更改)以来,没有任何更改。

但是,我对HHH-4876,HHH-4617以及PostgreSQL和BLOB(在的javadoc中提到

PostgreSQLDialect
)等问题的理解是,您应该设置以下属性

hibernate.jdbc.use_streams_for_binary=false

如果您想使用

oid
ie
byte[]
@Lob
(这是我的理解,因为
VARBINARY
这不是您想要的Oracle)。你有尝试过吗?

作为替代方案,HHH-4876建议使用不推荐使用的方法

PrimitiveByteArrayBlobType
来获得旧的行为(Hibernate
3.5之前的版本)。

参考文献

  • JPA 2.0规范
    • 第2.8节“映射非关系字段或属性的默认值”
    • 第11.1.6节“基本注释”
    • 第11.1.24节“ Lob注释”

资源资源

  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4876
  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4617
  • http://relation.to/Bloggers/PostgreSQLAndBLOBs


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号