关于hibernate查询的和开发中的一些疑问

lgb934 2013-07-31 06:40:28
我在开发的过程中遇到一些疑问,希望各大牛帮我解答下。

环境介绍:

假设现在有2个表

category(文章分类) id 主键
name 文章分类中文名
desc 描述

article(文章列表) id 主键
categoryid 分类id
title 文章标题
content 内容

因为用的是hibernate, 上面两个表对应的PO分别是CategoryPO , ArticlePO.没有配置外键映射.

1. 现在要求根据文章分类查询个分类的前10条record。

我想到的办法(1) .在service 层查询出所有categoryPO.name,然后再根据categoryPO.name去Article 里查询每个categoryPO.name的各10条。这样我有多少个category.name就返回多少个list,然后遍历每个list就行了。但是这样会造成多条sql语句查询,事务是用spring 配置的在service层的自动事务管理,

(2).只用一条HQL 查出一个list结果类似下面

id category.name aritcle.title
1 分类1 标题1
2 分类1 标题2
..... 这里重复。每个分类有10条
11 分类2 标题11
12 分类2 标题12

但是这句HQL不会写。然后前台在遍历这个list 。每次将遍历的category.name用临时变量保存,当遇到category.name不同是当作下一个category直接重复生成1个DIV显示新的category.

(3)在(2)的基础上不left join categoryPO,

id article.categoryid aritcle.title
1 1 标题1
2 1 标题2
..... 这里重复。每个分类有10条
11 2 标题11
12 2 标题12

然后再在java里用for循环把categoryPO set到articlePO里,不知道java的效率高还是数据库的效率高。
注:categoryPO我是全部已经缓存在ehcache里的,并且设置为永远不过期。

2. 就是有一种情况,我只需要PO的某些字段例如上面的AritclePO 有很多属性,但是某些时候我可能只需要部分例如:title,id...等。我人比较懒不想写select a.title,a.id from AritlcePO a,等语句,因为有时候虽然不是全部字段,但是字段也挺多;我能不能只写from AritclePO ,然后查询的时候,只根据我要的字段生成SQL,而不是默认的查询全部字段。我感觉这个有点类似延迟加载。能实现吗?


3. 我如果把对象放在缓存里(这里的缓存是指ehcache),并且设置永远不过期,这和直接在类里加载到内存有什么区别,比如:我用的是tomcat,那如果我把对象直接放到application里又有什么区别。

期望大牛们为我解答,也欢迎大家讨论一下,如果有表达不清晰的地方可以尽管问。谢谢...

...全文
38 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧