如何使用Hibernate持久保存Object类型的Java属性?

时间:2009-12-21 16:40:28

标签: hibernate orm annotations

我有一个带有类似属性的Java类

private Object myObj;

当我尝试使用Hibernate注释保存类时,我得到了相当混乱的错误消息“属性映射列数错误”。

持久化包含通用属性的类的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

正如您所说,对象可以是图像,视频等。

如果它应该只有二进制数据,你可以创建另一个类,并从这个类传输数据。在转移过程中,您可以将Object转换为byte[](具体取决于具体类型),并使用Lob数据类型(@Lob)进行映​​射。

为了扩展这一点,如果不仅支持二进制数据,则新对象可以有2个字段 - 一个是二进制,一个(或更多)是其他类型。

无论如何,现在的对象代表了一种非常愚蠢的设计,如果没有麻烦就不能坚持下去。

答案 1 :(得分:0)

如果可以提供帮助,请不要使用通用的Object属性。我第一次使用Hibernate刷新意味着继承一个像这样的东西的项目,这是一个痛苦的世界。正如Zoidberg所说,使用Object意味着你的模型不容易被序列化/版本化(如果我是诚实的话,这是轻描淡写的。)

答案 2 :(得分:0)

更改您的媒体资源类型:

private byte[] myObj;

这适用于Fluent NHibernate(虽然在C#中)和SQL字段类型 varbinary(max)

然后,您可以将其公开为图像,视频或其他内容。在Java中转换为图像的示例:

ImageIO.read(new ByteArrayInputStream(myObj));