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分了!谢谢各位回答!!!!
比如这一个属性要保存的值是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分了!谢谢各位回答!!!!
你说的我只能根据直觉每一个pojo实例映射的是一条数据库记录
那要求sum不就是遍历pojo实例 取对应属性相加吗
这时我应该怎么给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,以確定以上結果純屬猜測
錯了不要找我
我来给你捧场顺便带分走,嘿嘿。
6、true_false,yes_no,boolean都是对应java中java.lang.Boolean或boolean,对不同的数据库不同的表示方法而已
7、Hibernate的一级缓存是Hibernate中的内置缓存,是Session范围的,即session关掉一级缓存也就没了,这个缓存的时间有效性很短;二级缓存是Hibernate外置缓存,是SessionFactory范围的,有效时间较长,一般可通过其他缓存来设置(如OSCache,ehCache等)
再我就接着问吧。您回答的第五个问题,。说:connect卻不一定open,这句话不能理解啊,都连接上了session怎么会不是open的呢?还有第六个问题,您回答是:
boolean是可以true可以false,不確定
true_false是要么true要么false,以確定 能否举一个具体一点的例子?这样看实在是不懂。谢谢
5、Session.isOpen()检查Session是否打开,Session.isConnected()检查Session当前是否已连接到数据库 依照您的意思猜测,Session打开以后,有可能并没有连接到数据库?
你可以這樣試下
Session session=new Session();
session.createQuery("frome xxx");
system.out.println("aaaaa")
transaction.commit();
然後你看結果
一定是先輸出aaaaa
然後才是你hql的檢索結果
所以說連上了session他不一定open
要看你具體代碼怎么寫
而true_false对应的是CHAR(1)('Y'或者'N')
只遇到过这一个问题,其他都不清楚
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原理的简单模拟实现
感谢回复,我已经知道这个怎么做了,hibernate有自带的方法,给<property/>元素添加一个formula 属性就可以了
比自己实现要简单。
这个我只说下我自己的理解 不一定准确hibernate有两级缓存
session是第一级缓存
第二级貌似是sessionfactory(不太确定)说的简单一点关系数据库有很多数据二级缓存相当于 这些数据或一部分数据在内存中的对象类型的镜像这个镜像会根据设置间歇性的与数据库保持一致这样的好处是减少了不停的更新的数据库的次数(本质上应该就是内存数据写入硬盘的次数)
(打个比方 有三块面包给我吃
我可以每一分钟就吃一小粒面包 那我一天可能在一直吃
同样我还可以一天只吃3次 一次吃一块
)一级缓存session(这个由系统自动管理 不用我们操心 所以我个人的理解也不是很好)
session的缓存 也是内存中的一小块区域(我们进行数据操作时就是通过操作session缓存,
剩下的就是session缓存去更新二级缓存或者从二级缓存取对象这样)
这个我觉的和延迟加载有很大关系以从数据库中取数据为例
使用延迟加载的话
seesion直接关闭的话
因为session缓存中还没真正把需要的对象加载进去
所以会报seesion close的异常 或者 空指针这样可以在session关闭之前 强制初始化
也就是把需要的对象的数据从二缓那先加载过来
这样关了 数据对象还是在的就写这些吧 不一定准确 欢迎拍砖
真理是越辨越明的
boolean对应的是bit类型。而true_false对应的是char(1)类型。里面存的是t-f.这个太多了。同上。一级是在session级别的。session失效缓存的内容失效。二级缓存是
二级缓存是SessionFactory级别的。唉~~~回答的我~~头都蒙了~~
-------------------------------
这个是不是在tomcat里可以设置的啊~(我听说的 没试试过)
不过偶也是通过js来限定的~
二级缓存是SessionFactory级共享. list,iterator,get,load都会填充二级缓存,但只有iterator,get,load会从二级缓存中取数据(iterator可能存在N+1次查询).查询缓存由于命中率较低,所以hibernate缺省是关闭.SessionFactory中提供了evictXXX()方法用来清除缓存中的内容.