hibernate的get(java.lang.Class arg0, java.io.Serializable arg1) 续
来源:互联网 发布:对编程的认识与看法 编辑:程序博客网 时间:2024/05/24 02:39
上一篇写了hibernate在缓存中找不到对象的时候,去数据库查询。
但是上一篇中 Group gg2=(Group)session.get(Group.class, id2);时候,只会产生 select group0_.id as id3_0_, group0_.name as name3_0_ from t_group group0_ where group0_.id=?,
当 System.out.println("gg2size---"+gg2.getUsers().size());时候才发出select users0_.groupId as groupId1_, users0_.id as id1_, users0_.id as id4_0_,users0_.name as name4_0_, users0_.groupId as groupId4_0_ from t_user users0_ where users0_.groupId=?
得到gg2的属性users的值。
为什么一开始Group gg2=(Group)session.get(Group.class, id2);就得不到属性users对应的t_user表里的值呢?
之前一直以为是set标签里inverse="true"的原因,后来在set 标签里加了lazy="false" ,即
Group.hbm.xml改为
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hibernate">
<class name="Group" table="t_group">
<id name="id" type="int" column="id">
<generator class="native"></generator>
</id>
<property name="name" type="string" column="name"></property>
<set name="users" inverse="true" lazy="false">
<key column="groupId" > </key>
<one-to-many class="com.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
此时我再执行上篇文章的测试类方法:
后台得到:
Hibernate: select hibernate_sequence.nextval from dual
id--99
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into t_group (name, id) values (?, ?)
Hibernate: insert into t_group (name, id) values (?, ?)
Hibernate: insert into t_user (name, groupId, id) values (?, ?, ?)
Hibernate: insert into t_user (name, groupId, id) values (?, ?, ?)
name---g1
s---0
id2--99
Hibernate: select group0_.id as id3_0_, group0_.name as name3_0_ from t_group group0_ where group0_.id=?
Hibernate: select users0_.groupId as groupId1_, users0_.id as id1_, users0_.id as id4_0_, users0_.name as name4_0_, users0_.groupId as groupId4_0_ from t_user users0_ where users0_.groupId=?
gg2name---g1
gg2size---1
可以看出此时执行 Group gg2=(Group)session.get(Group.class, id2);是会产生
Hibernate: select group0_.id as id3_0_, group0_.name as name3_0_ from t_group group0_ where group0_.id=?
Hibernate: select users0_.groupId as groupId1_, users0_.id as id1_, users0_.id as id4_0_, users0_.name as name4_0_, users0_.groupId as groupId4_0_ from t_user users0_ where users0_.groupId=?
一次从数据库中得到gg2的所有属性的值。
总结:
inverse 只是影响两张表外键的值。
lazy影响一方查询时是不是立即到多方的数据库里查询。这就是经常说的懒加载,不是说不加载,而是说延迟加载,用到的时候加载。
上篇文章set标签里没有设置lazy默认的值应该是true。执行了懒加载。
- hibernate的get(java.lang.Class arg0, java.io.Serializable arg1) 续
- hibernate的get(java.lang.Class arg0, java.io.Serializable arg1)
- hibernate的get(java.lang.Class arg0, java.io.Serializable arg1) 再续
- Ant打包jar,参数名变为无意义的arg0,arg1,Java代码提示参数名称无意义
- 解决方法参数为arg0,arg1的问题
- java.io.Serializable的作用
- hibernate get(User.class,Serializable id)
- public class 实体类名 implements java.io.Serializable{...}
- public class 实体类名 implements java.io.Serializable{...}
- public class 实体类名 implements java.io.Serializable{...}
- java.io.Serializable
- java.io.serializable
- java.io.Serializable
- java.io 接口 Serializable
- java.io.Serializable 接口
- java.io.Serializable 接口
- java.io.Serializable
- java.io.serializable 2
- SharePoint 2013 BI 之 report service 身份认证模式
- 苗苗得肺炎了
- UDP 编程
- 面试题
- sizeof 讨论
- hibernate的get(java.lang.Class arg0, java.io.Serializable arg1) 续
- Java长盛不衰的12个原因
- 工程引用别外一个java工程时,怎么发布部署
- 我的MAC VIM for python设置
- upload.parseRequest(request)为空
- C语言的一些排序方法
- orcale中多表查询
- CentOS 6.3下Zabbix安装部署
- 使用路由器上网,就不能打开MODEM配置页面了?非也