2 lgb934 lgb934 于 2013.07.31 16:27 提问

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

我在开发的过程中遇到一些疑问,希望各大牛帮我解答下。

环境介绍:

假设现在有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里的,并且设置为永远不过期。

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!