一大把基础问题

joejoe1991 2008-03-20 09:58:04
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分了!谢谢各位回答!!!!
...全文
576 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2008-06-16
  • 打赏
  • 举报
回复
你这家伙,快把帖子给我结了!!
token1984 2008-05-05
  • 打赏
  • 举报
回复
帮顶 嘿嘿
qq278095755 2008-05-05
  • 打赏
  • 举报
回复
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()方法用来清除缓存中的内容.
yiyi_wx 2008-05-05
  • 打赏
  • 举报
回复
3.struts1.2如何限制上传的文件的类型?是不是自己写代码判断?
-------------------------------
这个是不是在tomcat里可以设置的啊~(我听说的 没试试过)
不过偶也是通过js来限定的~
virusswb 2008-05-05
  • 打赏
  • 举报
回复
帮顶了
最大搞个无穷大吧
Pol 2008-05-05
  • 打赏
  • 举报
回复
完全不懂啊.
睿音 2008-05-05
  • 打赏
  • 举报
回复
发现joejoe真阴险~~120分问这么多问题~~~

[Quote=引用楼主 joejoe1991 的帖子:]
1.HIBERNATE 如何将POJO的一个属性映射到一个计算列上?
比如这一个属性要保存的值是count(sid)
[/Quote]
不太明了你的意图是什么,想将一个查询结果集合附加在一个属性上吗?那DAO层用来做什么呢。。。而且如果这样就需要有lazyload。不然性能会影响。如果lazyload,就要去去拦截以免session关闭。这样实现是很没意义的~~~

[Quote=引用楼主 joejoe1991 的帖子:]
2.听说网上有很多JSP空间都不支持hibernate框架,想不明白了,hibernate不是只要有jar包就可以用了么?还要什么支持?
[/Quote]
我了解过一些支持struts等等的空间。对于这些空间同样需要你上传你的框架包文件。大部分也没有做技术限制。只是在对不同的支持上做了不同的内存分配。

[Quote=引用楼主 joejoe1991 的帖子:]
3.struts1.2如何限制上传的文件的类型?是不是自己写代码判断?
[/Quote]
我都是用js来限定扩展名。上传是流传输,上传文件的类型是无法获知的吧。就像我吧一个扩展名为rar的改名为bmp。好像获知起来比较难。

[Quote=引用楼主 joejoe1991 的帖子:]
4.在用validator验证ActionForm的时候,有一个属性,我要求它最小值是1,最大值却没有要求。
这时我应该怎么给intRange这个验证器传参数呢?我只传一个min报错。必须要指定一个max??
[/Quote]
这个不答了~~~嘿嘿~~~yami说的很清楚了。或者自己实现一个验证器也是可以的嘛~~

[Quote=引用楼主 joejoe1991 的帖子:]
5.hibernate ,Session.isOpen和isConnected有什么区别?
[/Quote]
从hibernate的api来看isConnected是判断Session是否处于连接状态而isOpen是判断Session是否打开。对于我的理解回头看了源码再说吧。唉~~~很头疼。

[Quote=引用楼主 joejoe1991 的帖子:]
6.Hibernate里,boolean类型和true_false类型的区别是什么?有一次我把一个属性的type设置成true_false,运行不成功,改成boolean就行了。
[/Quote]
hibernate中与sql中类型的对应是这样的
boolean对应的是bit类型。而true_false对应的是char(1)类型。里面存的是t-f.

[Quote=引用楼主 joejoe1991 的帖子:]
7.什么是hibernate二级缓存、一级缓存(不好意思,这个网上介绍的文章确实有很多,不过没有一个看懂的。希望能说的通俗一点,我比较笨)
[/Quote]
这个太多了。同上。一级是在session级别的。session失效缓存的内容失效。二级缓存是
二级缓存是SessionFactory级别的。

唉~~~回答的我~~头都蒙了~~
sunyujia 2008-05-05
  • 打赏
  • 举报
回复
期待第2问和第5问的深入解答
gzbao9999 2008-05-05
  • 打赏
  • 举报
回复
再回答下最后一题
这个我只说下我自己的理解 不一定准确

hibernate有两级缓存
session是第一级缓存
第二级貌似是sessionfactory(不太确定)

说的简单一点

关系数据库有很多数据

二级缓存相当于 这些数据或一部分数据在内存中的对象类型的镜像

这个镜像会根据设置间歇性的与数据库保持一致

这样的好处是减少了不停的更新的数据库的次数(本质上应该就是内存数据写入硬盘的次数)
(打个比方 有三块面包给我吃
我可以每一分钟就吃一小粒面包 那我一天可能在一直吃
同样我还可以一天只吃3次 一次吃一块
)

一级缓存session(这个由系统自动管理 不用我们操心 所以我个人的理解也不是很好)
session的缓存 也是内存中的一小块区域(我们进行数据操作时就是通过操作session缓存,
剩下的就是session缓存去更新二级缓存或者从二级缓存取对象这样)
这个我觉的和延迟加载有很大关系

以从数据库中取数据为例
使用延迟加载的话
seesion直接关闭的话
因为session缓存中还没真正把需要的对象加载进去
所以会报seesion close的异常 或者 空指针这样

可以在session关闭之前 强制初始化
也就是把需要的对象的数据从二缓那先加载过来
这样关了 数据对象还是在的

就写这些吧 不一定准确 欢迎拍砖
真理是越辨越明的
joejoe1991 2008-05-05
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 gzbao9999 的回复:]
郁闷 写了一般 突然不知道怎么什么都没有了,就回答下第一个题吧
BS CSDN下
第一个问题 问到了hibernate的实现机制--反射

什么是反射
java中有两种创建对象的方式
第一种用new来显示的声明一个大家天天用

第二种 就是用反射的方法
其实反射发家也是天天用 只不过可能没意识到
还记得jdbc怎么加载驱动的么 Class.forname(packagename.Classname);
这样是动态的把一个类加载进内存
那么怎么动态的创建一个类…
[/Quote]

感谢回复,我已经知道这个怎么做了,hibernate有自带的方法,给<property/>元素添加一个formula 属性就可以了
比自己实现要简单。
gzbao9999 2008-05-05
  • 打赏
  • 举报
回复
郁闷 写了一般 突然不知道怎么什么都没有了,就回答下第一个题吧
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原理的简单模拟实现
yslan 2008-05-05
  • 打赏
  • 举报
回复
偶是来接分的.....瞧都瞧不懂
fuyou001 2008-05-05
  • 打赏
  • 举报
回复
学习了
joejoe1991 2008-05-05
  • 打赏
  • 举报
回复
晕,什么时候被顶起来了。加点分吧。。
南南北北 2008-05-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 joejoe1991 的帖子:]
1.HIBERNATE 如何将POJO的一个属性映射到一个计算列上?
比如这一个属性要保存的值是count(sid)

2.听说网上有很多JSP空间都不支持hibernate框架,想不明白了,hibernate不是只要有jar包就可以用了么?还要什么支持?
3.struts1.2如何限制上传的文件的类型?是不是自己写代码判断?
4.在用validator验证ActionForm的时候,有一个属性,我要求它最小值是1,最大值却没有要求。
这时我应该怎么给intRange这个验证器传参数呢?…
[/Quote]

好大一把,我一把只能抓4个问题,没你手大啊。
南南北北 2008-05-05
  • 打赏
  • 举报
回复
难怪我没升星,我一个也不会啊。

友情up一下
li_hy2002 2008-05-05
  • 打赏
  • 举报
回复
7一级缓存是session维护的,就是只要session没关闭,数据就不会变,我实际中遇到过,例如你不加事务,查询出结果后改变数据库的数据再刷新页面数据也不会变,二级缓存相当与html里的页面缓存,是可以自己控制的
只遇到过这一个问题,其他都不清楚
raigor235 2008-05-05
  • 打赏
  • 举报
回复
我狂晕!!居然一个都不知道!!? 期待高手进来!!帮你顶上去!!
ling_min 2008-05-05
  • 打赏
  • 举报
回复
Hibernate确实搞不懂,o(∩_∩)o...帮你顶了。
sunyujia 2008-05-03
  • 打赏
  • 举报
回复
老兄你加点分吧加到200,估计差不多就有答案了很多问题我也十分想知道.看了你的空间你的分数好恐怖啊,拿出一点花掉吧.
加载更多回复(27)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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