最近使用hibernate来做一个小论坛,现在想要实现一个功能,就是要把论坛的版块的信息显示出来,比如:版块名称   主题/帖子   更新时间j2ee         15/100     2010-06-06我数据库的信息是这样设计的帖子表card
cardId  帖子主键ID
title   主题名
content  内容
sendTime 发送时间
senderId   发送者ID(关联用户表的userId)
areaId   版块ID(关联版块表的版块Id)回复帖子表recard
keyId 主键标识ID
cardId 帖子Id(关联帖子表的cardId)
content 内容
receiverId 回复者的ID(关联用户表的userId)
reTime 回复时间板块表area
areaId 主键版块ID
areaName 版块名称显示怎么样显示上面所说的每一个版块的得主题数和回复数呢?hibernate是自动生成的类。。想知道怎么写hql语句
各位大侠指点一下。。小弟感激不尽在线等

解决方案 »

  1.   

    在hibernate 也可以写 原生态的sql语句
    板块主题数: select count(cardId) from card where areaId ='xxx';
    回复数:select count(keyId) from recard rc where rc.cardId in (select cardId from card where areaId = 'xxId')
      

  2.   

    我本就不愿意想用sql语句来写的哎
      

  3.   

    这个容易!  你要配置好他们的关系!  如果是myeclipse自动生成的类型和配置文件那么只要查询版块表就可以了
    "FROM Aree"(版块表对应的类名)  其它的帖子数,和回复帖子数!  通过配置会自动加载过来的!!如果还不懂!  再问我!!!
      

  4.   

    恩、。?板块类只有3个属性。。AreaId AreaName 另一个是自动生成的集合。。
    查的话怎么查?
      

  5.   

    你去查询是否有查询的条件!  比如根据名字去查询还是 根据id去查询如果不用条件的话那么就是FROM Area就可以了!!
      

  6.   

    板块表只有一个areaID和帖子表里面的areaid像关联,没有关联。我想直接全部查出来所有的版块名称和对应的主题数和回复数
      

  7.   

    按照你那么说的话。那么查询版块这个类的时候。他会自动加载帖子表里面的信息过来么?还是查询帖子表的时候自动加载过来。。
    因为板块表和帖子表的关系是一对多,而不是多对一啊,,今天想了好久了。。我们前两天学的hibernate。。
    麻烦您再解答一下
      

  8.   

    恩!那么你想查询哪一个版本块下的所有的版块名称和对应的主题数和回复数
    比较说要查询出版本id为1的那么hql这么写就可以了"FROM Area a where a.areaId = 1"主题数和回复数不用去管,因为配置了 hibernate会自动查询出来的(根据它们的主外键关系!)
      

  9.   

    额  在你有关联的类中加一个字段  如在card 中加一个字段  Set<recard> recardSet=new ...
    用以查询所有的回复 
    我有段代码  贴给你吧  不知道有没有用  他是User 和  Folder  每个人都有很多的文件夹public class User {
        private int uid;
        private String name;
        private String password;
        private Set<Folder> folders=new HashSet<Folder>();    public User(){    }
    //...getter and setter
        public Set<Folder> getFolders(){
            return  folders;
        }
    }
    //一下为Dao方法    public static void addFolder(Folder folder) {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.save(folder);
            session.getTransaction().commit();
        }    public static void addFolderToUser(int uid, int fid) {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            User user = new User();
            user = (User) session.load(User.class, uid);
            Folder folder = new Folder();
            folder = (Folder) session.load(Folder.class, fid);
            user.getFolders().add(folder);
            session.getTransaction().commit();
        }//其中有个类交HibernateUtil
    /**
     *
     * @author Damon
     */
    public class HibernateUtil {    private static final SessionFactory sessionFactory;    static {
            try {
                // Create the SessionFactory from hibernate.cfg.xml
                sessionFactory = new Configuration().configure().buildSessionFactory();
            } catch (Throwable ex) {
                // Make sure you log the exception, as it might be swallowed
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }    public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    }
    其实你的问题我没太看懂 不知道回答有没有用  哈哈