有一个oracle表,功能类似于论坛中的一个主题结构:
create table topic (
id integer primary key, -- 主键
title nvarchar2(100), -- 标题
content nvarchar2(2000), -- 内容
adddate date, -- 创建时间
photo1 blob, -- 保存第一张二进制图片数据
photo2 blob, -- 保存第二张二进制图片数据
photo3 blob, -- 保存第三张二进制图片数据
photo4 blob -- 保存第四张二进制图片数据
);因为当在一个列表中显示信息时,是不需要把图片数据取出来的,否则对内存是很大的浪费。因此我写了两个实体类:Topic和TopicDigest,其中的 Topic 把表中所有字段都对应封装起来,而 TopicDigest 则忽略了图片数据,但是多了一个 photoCount 的属性,用于指示一个主题实际上传了多少张图片对于 TopicDigest 如果是在pl/sql中,要想得到 photoCount 值,我可以这样查询:select id, title, content, adddate,
(case when photo1 is null then 0 else 1 end)
+ (case when photo2 is null then 0 else 1 end)
+ (case when photo3 is null then 0 else 1 end)
+ (case when photo4 is null then 0 else 1 end)
as photoCount
from topic可以得到一条记录中图片的数量那么这个办法如果在 hibernate 中实现?
create table topic (
id integer primary key, -- 主键
title nvarchar2(100), -- 标题
content nvarchar2(2000), -- 内容
adddate date, -- 创建时间
photo1 blob, -- 保存第一张二进制图片数据
photo2 blob, -- 保存第二张二进制图片数据
photo3 blob, -- 保存第三张二进制图片数据
photo4 blob -- 保存第四张二进制图片数据
);因为当在一个列表中显示信息时,是不需要把图片数据取出来的,否则对内存是很大的浪费。因此我写了两个实体类:Topic和TopicDigest,其中的 Topic 把表中所有字段都对应封装起来,而 TopicDigest 则忽略了图片数据,但是多了一个 photoCount 的属性,用于指示一个主题实际上传了多少张图片对于 TopicDigest 如果是在pl/sql中,要想得到 photoCount 值,我可以这样查询:select id, title, content, adddate,
(case when photo1 is null then 0 else 1 end)
+ (case when photo2 is null then 0 else 1 end)
+ (case when photo3 is null then 0 else 1 end)
+ (case when photo4 is null then 0 else 1 end)
as photoCount
from topic可以得到一条记录中图片的数量那么这个办法如果在 hibernate 中实现?
或者当用户保存或者删除topic或者删除photo1 、2、3、4的时候
你手动更新photoCount,第一次添加的时候+1,删除的时候-1,
你要知道你每次添加或者删除的图片张数
如果你最频繁的操作时查询
你的办法应该可行
不过可能会带来其它方面的麻烦。比如两三个人开发同一个项目,或者将来有别的人接手这个项目时,忘记在适当的时机去更新 phtocount 字段,这将会造成数据不一致