没有合适的资源?快使用搜索试试~ 我知道了~
首页java游戏编程java游戏编程java游戏编程
java游戏编程java游戏编程java游戏编程
需积分: 10 154 浏览量
更新于2023-03-16
评论 2
收藏 50KB DOC 举报
java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程
资源详情
资源评论
资源推荐

Hibernate lazy
这个面试官问的还蛮深的,一般人确实只知道 lazy 是用来控制延迟加载和立即加载的,而
没有去考虑为什么要这么用。
hibernate3.0 中 lazy 有三个值,true,false,proxy,默认的是 lazy="proxy".
具体设置成什么要看你的需求,并不是说哪个设置就是最好的。
假如在 student 对象中包含一个 head 对象
如果你确定在用 student 对象的时候就要用到 head 对象里的属性,那你就设置立即加载,
因为设置立即加载那么在查询 student 的同时就会查询 student 的 head,hibernate 就会在
查询的时候关联两张表从而生成的 sql 就可能只有一条。而如果你设置的是延迟加载,那
么肯定会要生成 1+N 条 sql 语句:其中“1”是查询 student 的语句,“N”是根据 N 个 student 的
id 去查询 head 的 N 条语句。而且,延迟加载是要用到的时候才去执行查询,这样系统判
断那里需要加载,那里不需要加载也需要时间,性能上肯定就不如立即加载了!
如果,你是有的地方需要用到 student 的时候才用到 head 属性,那么你就设置成延迟加载,
因为查询 2 张表的数据肯定要比查询 1 张表的数据消耗大。
到低要怎样设置就要看你的实际需求了
hibernate manytomany 多对多
接着帖 多对多代码。多对多在 HIBERNATE 表示是两个关联类里互相有对方集合。数据库
贴上先
create table `anietest`.`student`(
`stuid` int not null auto_increment,
`stuname` varchar(100),
primary key (`stuid`)
);
create table `anietest`.`teacher`(
`teaid` int not null auto_increment,

`teaname` varchar(100),
primary key (`teaid`)
);
还有个中间表(这个中间表在 HIBERNATE 里不用映射文件,不过要留意两个关联表的映
射文件)
create table `anietest`.`stu_tea_table`(
`stuid` int,
`teaid` int
);
对应的映射文件如下:
STUDENT:
<class name="org.nieweiguo.model.Student" table="student" >
<id name="stuid" type="java.lang.Integer">
<column name="stuid" />
<generator class="native" />
</id>
<property name="stuname" type="java.lang.String">
<column name="stuname" length="100" />
</property>
<set name="teachers"
table="stu_tea_table"
cascade="save-update"
inverse="false"
>
<key column="stuid"></key>
<many-to-many class="org.nieweiguo.model.Teacher" column="teaid"></many-to-many>
</set>
</class>
TEACHER: <class name="org.nieweiguo.model.Teacher" table="teacher" >
<id name="teaid" type="java.lang.Integer">
<column name="teaid" />
<generator class="native" />
</id>
<property name="teaname" type="java.lang.String">
<column name="teaname" length="100" />
</property>
<set name="students"
table="stu_tea_table"
inverse="true"
>
<key column="teaid"></key>
<many-to-many class="org.nieweiguo.model.Student" column="stuid"></many-to-many>
</set>
</class>

在保存的 CTION 里这样写的测试代码:
Student stu1=new Student();
Student stu2=new Student();
Teacher tea1=new Teacher();
Teacher tea2=new Teacher();
StudentDAO stuDao=new StudentDAO();
stu1.setStuname("anie1");
stu2.setStuname("anie2");
tea1.setTeaname("tea1");
tea2.setTeaname("tea2");
stu1.getTeachers().add(tea1);
stu1.getTeachers().add(tea2);
stu2.getTeachers().add(tea1);
stu2.getTeachers().add(tea2);
stuDao.save(stu1);
stuDao.save(stu2);
在做多对多的时候我碰到两个问题,如果你用工具生成 MODEL 的映射文件话,记得要删
除他默认写的对应数据库映射。然后在 HIBERNATE.HBM.XML 里面加上,不然会报异
常。
HIBERNATE 初步学习到此结束先,下一站-SPRING
hibernate 多对多关系配置 第二种 加中间关系表配置
先贴出表的代码
create table `anietest`.`student`(
`stuid` int not null auto_increment,
`stuname` varchar(100),
primary key (`stuid`)
);
create table `anietest`.`teacher`(
`teaid` int not null auto_increment,
`teaname` varchar(100),
primary key (`teaid`)
);
还有个中间表(这个中间表在 HIBERNATE 里不用映射文件,不过要留意两个关联表的映
射文件)
create table `anietest`.`stu_tea_table`(
剩余10页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0