1.HIBERNATE 如何将POJO的一个属性映射到一个计算列上?
  比如这一个属性要保存的值是count(sid)2.听说网上有很多JSP空间都不支持hibernate框架,想不明白了,hibernate不是只要有jar包就可以用了么?还要什么支持?
3.struts1.2如何限制上传的文件的类型?是不是自己写代码判断?
4.在用validator验证ActionForm的时候,有一个属性,我要求它最小值是1,最大值却没有要求。
  这时我应该怎么给intRange这个验证器传参数呢?我只传一个min报错。必须要指定一个max??
5.hibernate ,Session.isOpen和isConnected有什么区别?
6.Hibernate里,boolean类型和true_false类型的区别是什么?有一次我把一个属性的type设置成true_false,运行不成功,改成boolean就行了。
7.什么是hibernate二级缓存、一级缓存(不好意思,这个网上介绍的文章确实有很多,不过没有一个看懂的。希望能说的通俗一点,我比较笨)上面我问题在提问以前全都BAIDU过,要么就是没有找到答案,要么就是看不懂他们在说什么,希望大家帮忙!
实在不好意思,只有20分了!谢谢各位回答!!!!

解决方案 »

  1.   

    不是不回 乍一看都是不太会的1.计算pojo的实例数量吧 
      

  2.   

    实力不济,无法解答~~~hibernate只是在用,但是没有遇到过你的问题,也没有深究内部的原理,还需要努力
      

  3.   

    解1:自己写一个方法,里面写一些"HQL"语言,然后调用这个方法.解2:这里空间本身的问题,也就是服务器的问题,你可以找一些支持的用用.解3:我用的是Hibernate1.1
      

  4.   

    那如果我换成sum() 怎么办?
      

  5.   


    你说的我只能根据直觉每一个pojo实例映射的是一条数据库记录
    那要求sum不就是遍历pojo实例 取对应属性相加吗
      

  6.   

    4.在用validator验证ActionForm的时候,有一个属性,我要求它最小值是1,最大值却没有要求。 
      这时我应该怎么给intRange这个验证器传参数呢?我只传一个min报错。必须要指定一个max?? 
    ==============================================
    那就不要用minmax    用validwhen
    或者你估計下    最大可能有多大,填個他取不到的上去,就是根據數據庫裡的來自己造個上去   
    比如這個字段數據庫里是5位   你就填個99999或者100000上去
    5.hibernate ,Session.isOpen和isConnected有什么区别?
    ===============================================
    open會connect 
    connect卻不一定open6.Hibernate里,boolean类型和true_false类型的区别是什么?有一次我把一个属性的type设置成true_false,运行不成功,改成boolean就行了。 
    ===============================================
    boolean是可以true可以false,不確定
    true_false是要么true要么false,以確定以上結果純屬猜測
    錯了不要找我
      

  7.   

    joejoe把问题都带到这里来了哈:)
    我来给你捧场顺便带分走,嘿嘿。
      

  8.   

    5、Session.isOpen()检查Session是否打开,Session.isConnected()检查Session当前是否已连接到数据库
    6、true_false,yes_no,boolean都是对应java中java.lang.Boolean或boolean,对不同的数据库不同的表示方法而已
    7、Hibernate的一级缓存是Hibernate中的内置缓存,是Session范围的,即session关掉一级缓存也就没了,这个缓存的时间有效性很短;二级缓存是Hibernate外置缓存,是SessionFactory范围的,有效时间较长,一般可通过其他缓存来设置(如OSCache,ehCache等)
      

  9.   

    感激啊,沉下去这么长时间了,你居然帮忙顶上来了。
    再我就接着问吧。您回答的第五个问题,。说:connect卻不一定open,这句话不能理解啊,都连接上了session怎么会不是open的呢?还有第六个问题,您回答是:
    boolean是可以true可以false,不確定 
    true_false是要么true要么false,以確定 能否举一个具体一点的例子?这样看实在是不懂。谢谢
      

  10.   

    谢谢回答。您对第五题的回答是:
    5、Session.isOpen()检查Session是否打开,Session.isConnected()检查Session当前是否已连接到数据库 依照您的意思猜测,Session打开以后,有可能并没有连接到数据库?
      

  11.   

    seesion只不過是再緩存中而已要你commit了他才會執行,所以如果你吧連接數據庫放到session后一步也是可以的
    你可以這樣試下
    Session session=new Session();
    session.createQuery("frome xxx");
    system.out.println("aaaaa")
    transaction.commit();
    然後你看結果
    一定是先輸出aaaaa
    然後才是你hql的檢索結果
    所以說連上了session他不一定open
    要看你具體代碼怎么寫
      

  12.   

    Hibernate映射类型中,boolean对应标准SQL数据类型中的BIT(0或者1)
    而true_false对应的是CHAR(1)('Y'或者'N')
      

  13.   

    Hibernate确实搞不懂,o(∩_∩)o...帮你顶了。
      

  14.   

    7一级缓存是session维护的,就是只要session没关闭,数据就不会变,我实际中遇到过,例如你不加事务,查询出结果后改变数据库的数据再刷新页面数据也不会变,二级缓存相当与html里的页面缓存,是可以自己控制的
    只遇到过这一个问题,其他都不清楚
      

  15.   

    郁闷 写了一般 突然不知道怎么什么都没有了,就回答下第一个题吧
    BS CSDN下
    第一个问题 问到了hibernate的实现机制--反射什么是反射
    java中有两种创建对象的方式
    第一种用new来显示的声明一个大家天天用第二种 就是用反射的方法
    其实反射发家也是天天用 只不过可能没意识到
    还记得jdbc怎么加载驱动的么 Class.forname(packagename.Classname);
    这样是动态的把一个类加载进内存
    那么怎么动态的创建一个类的实例呢
    很简单Class.forname(packagename.Classname).newInstance();如果你想用个引用来接受这个实例的话用它的超类或者实现的接口都是可以的比如
    Object object=Class.forname(packagename.Classname).newInstance();pojo类
    public class User{
    private String username;public void setUsername(){
    this.username=username;
    }
    public String getUsername(){
    return username;
    }
    }最表面的来看
    hibernate只不过是数据存取的类度大了一些以对象为单位
    jdbc的方式是以一个属性为单位hibernate的底层实现方式依然是使用的jdbc,也就是说依然是使用的属性为单位
    这个在使用hibernate的时候 设置show sql=true
    就可以在控制台看到hibernate操作的时候 所动态生成的sql语句从hibernate.save(user);
    讲起
    传递了一个user的引用到hibernate框架
    //以下为模拟的hibernate的实现机制
    那么就获得user对象的类型
    user.getClassType();
    然后利用java的反射机制来动态的创建一个这种类型的对象
    然后 通过methodinvoke(方法援引--动态的引用一个对象的方法)等类来
    等操作user对象来添加方法和属性值到新创建到的对象中
    (这样做的好处就是不管传进来的是什么类型的对象,有多少个属性,什么类型的属性 都可以通过反射动态来的创建新的对象)接下来的事情就好像我们自己在用jdbc进行数据的存取了
    无非就是动态的组装生成sql语句
    再调用jdbc来执行时候久了 有些反射的类记不起来怎么写了
    可以找孙卫琴的那本精通hibernate来看下
    里面有介绍的java的反射机制
    以及hibernate原理的简单模拟实现
      

  16.   


    感谢回复,我已经知道这个怎么做了,hibernate有自带的方法,给<property/>元素添加一个formula 属性就可以了 
    比自己实现要简单。
      

  17.   

    再回答下最后一题
    这个我只说下我自己的理解 不一定准确hibernate有两级缓存
    session是第一级缓存
    第二级貌似是sessionfactory(不太确定)说的简单一点关系数据库有很多数据二级缓存相当于 这些数据或一部分数据在内存中的对象类型的镜像这个镜像会根据设置间歇性的与数据库保持一致这样的好处是减少了不停的更新的数据库的次数(本质上应该就是内存数据写入硬盘的次数)
    (打个比方 有三块面包给我吃
    我可以每一分钟就吃一小粒面包 那我一天可能在一直吃
    同样我还可以一天只吃3次 一次吃一块
    )一级缓存session(这个由系统自动管理 不用我们操心 所以我个人的理解也不是很好)
    session的缓存 也是内存中的一小块区域(我们进行数据操作时就是通过操作session缓存,
    剩下的就是session缓存去更新二级缓存或者从二级缓存取对象这样)
    这个我觉的和延迟加载有很大关系以从数据库中取数据为例
    使用延迟加载的话
    seesion直接关闭的话
    因为session缓存中还没真正把需要的对象加载进去
    所以会报seesion close的异常 或者 空指针这样可以在session关闭之前 强制初始化
    也就是把需要的对象的数据从二缓那先加载过来
    这样关了 数据对象还是在的就写这些吧 不一定准确 欢迎拍砖
    真理是越辨越明的
      

  18.   

    发现joejoe真阴险~~120分问这么多问题~~~不太明了你的意图是什么,想将一个查询结果集合附加在一个属性上吗?那DAO层用来做什么呢而且如果这样就需要有lazyload。不然性能会影响。如果lazyload,就要去去拦截以免session关闭。这样实现是很没意义的~~~我了解过一些支持struts等等的空间。对于这些空间同样需要你上传你的框架包文件。大部分也没有做技术限制。只是在对不同的支持上做了不同的内存分配。我都是用js来限定扩展名。上传是流传输,上传文件的类型是无法获知的吧。就像我吧一个扩展名为rar的改名为bmp。好像获知起来比较难。这个不答了~~~嘿嘿~~~yami说的很清楚了。或者自己实现一个验证器也是可以的嘛~~从hibernate的api来看isConnected是判断Session是否处于连接状态而isOpen是判断Session是否打开。对于我的理解回头看了源码再说吧。唉~~~很头疼。hibernate中与sql中类型的对应是这样的
    boolean对应的是bit类型。而true_false对应的是char(1)类型。里面存的是t-f.这个太多了。同上。一级是在session级别的。session失效缓存的内容失效。二级缓存是
    二级缓存是SessionFactory级别的。唉~~~回答的我~~头都蒙了~~
      

  19.   

    3.struts1.2如何限制上传的文件的类型?是不是自己写代码判断? 
    -------------------------------
    这个是不是在tomcat里可以设置的啊~(我听说的 没试试过)
    不过偶也是通过js来限定的~
      

  20.   

    hibernate的一级缓存是内置的而且是session级共享的.save,update,saveOrUpdate,load,get,list,iterate,lock这些方法都会将对象放在一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用evict,clear方法清除缓存中的内容.
    二级缓存是SessionFactory级共享. list,iterator,get,load都会填充二级缓存,但只有iterator,get,load会从二级缓存中取数据(iterator可能存在N+1次查询).查询缓存由于命中率较低,所以hibernate缺省是关闭.SessionFactory中提供了evictXXX()方法用来清除缓存中的内容.