提高Jpa图像加载时间的性能

时间:2011-11-02 12:52:44

标签: java performance image jpa

我有一个应用程序必须处理一个对象列表(使用JPA从数据库中检索),其中包含一个序列化的图像。

问题在于,当我收集存储在数据库中的此对象的大约50个实例时,从数据库加载50张图片(约5秒)变得非常慢,这对用户来说很烦人。

有没有办法将此列从数据库设置为延迟初始化?或者我应该创建一个单独的对象来携带图像,并使用ID引用它?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Hibernate至少允许使用惰性列(使用@Basic注释的fetch属性),但我认为并不是所有JPA供应商都支持它。

是否真的有必要将图像存储在数据库中?将它们存储在文件系统中通常更有效,并且只在数据库中存储路径。

答案 1 :(得分:0)

是的,有一个layz loading attriubte属性。

 @Basic(fetch = FetchType.LAZY)
 private String myBigString;

来自JPA 2.0规范

  

11.1.6基本注释基本注释是到数据库列的最简单的映射类型。 Basic注释可以应用于a   任何以下的持久属性或实例变量   types: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的任何其他类型。

     

...

     

FetchType枚举定义了从中获取数据的策略   database:public enum FetchType {LAZY,EAGER};

     

...

     

LAZY策略是对持久性提供程序运行时的暗示   首次访问时,应该懒散地获取数据。该   允许实现急切地获取LAZY的数据   策略提示已被指定。特别是,懒惰提取可能   仅适用于基于属性的访问的基本映射   使用。


另一种技术是对同一个表进行第二次映射,但只能使用您需要的属性。