6

我有一个Image保存图像信息的表。我也想存储图像本身。我也应该这样

1.将 Blob 存储在同一个图像表中,然后像下面这样惰性地获取它

@Basic(optional = false, fetch = FetchType.LAZY)
@Lob
@Column(name = "IMAGE_BLOB", length=100000)    //This will generate MEDIUMBLOB
private byte[] imageBlob;

或者

2.创建另一个ImageBlob与 有OneToOne关系的表Image,并获取惰性关系

@OneToOne(cascade = CascadeType.ALL, mappedBy = "image", fetch=FetchType.LAZY)
private ImageBlob imageBlob;

这两种技术在性能方面是否相同?

4

2 回答 2

4

据我所知,第一个不适用于 Hibernate 和 EclipseLink 作为 JPA 提供程序。LAZY 是对提供者的提示,它们会立即加载而不会报告错误或警告。

只有启用类编织时,OneToOne 关联才会是惰性的,否则它也无济于事。

我已经使用一个名为 LazyBlob 的完全独立的表来完成它,它具有属性“entity”和“id”,并编写了一个实用程序类来从该表中懒惰地获取 lob。

于 2012-11-07T08:57:18.867 回答
3

两者都应该产生相同的性能,但我建议将第二个用于大斑点。

数据库可能对 blob 很挑剔,最好将它们与自己的对象隔离开来。这将使您能够更好地控制 blob。

于 2012-04-12T12:47:39.700 回答