<hibernate-mapping>
<class name="foo.InfoClass" table="INFOCLASS">
<id name="id" column="ID" type="string">
<generator class="uuid.hex" />
</id>
<property name="name" column="C_NAME" type="string"/>
<set name="infoList" table="INFO" lazy="true" inverse="true"
cascade="save-update" sort="unsorted">
<key column="id" />
<one-to-many class="foo.Info" />
</set>
</class>
</hibernate-mapping>
//session 已经被初始化好,不是null 第一行不会抛出 NullPointException
1 InfoClass infoClass = session.find("from InfoClass").get(0);
2 infoClass.setId("new date1");
3 session.saveOrUpdate(infoClass);
4 session.close();
5 Set set = infoClass.getInfoList();
6 for(Iterator itr = set.iterator();itr.hasNext();){
7 Info info = (Info) itr.next();
}
程序通过了编译,数据库中有足够的记录,请问运行时程序是否报错?如果会,在第几行,为什么?(有2个错误)Hibernate的N+1次查询问题?如何解决?
<class name="foo.InfoClass" table="INFOCLASS">
<id name="id" column="ID" type="string">
<generator class="uuid.hex" />
</id>
<property name="name" column="C_NAME" type="string"/>
<set name="infoList" table="INFO" lazy="true" inverse="true"
cascade="save-update" sort="unsorted">
<key column="id" />
<one-to-many class="foo.Info" />
</set>
</class>
</hibernate-mapping>
//session 已经被初始化好,不是null 第一行不会抛出 NullPointException
1 InfoClass infoClass = session.find("from InfoClass").get(0);
2 infoClass.setId("new date1");
3 session.saveOrUpdate(infoClass);
4 session.close();
5 Set set = infoClass.getInfoList();
6 for(Iterator itr = set.iterator();itr.hasNext();){
7 Info info = (Info) itr.next();
}
程序通过了编译,数据库中有足够的记录,请问运行时程序是否报错?如果会,在第几行,为什么?(有2个错误)Hibernate的N+1次查询问题?如何解决?
采用了延时加载,所以你不能在关闭session后在实际加载set
Hibernate的N+1次查询问题?
是指的使用session.iterate方法进行查询
解决方法是用find代替
或者find和iterate一起使用,由于find不会利用缓存,但执行sql只有1条,所以先find,然后用iterate就可以充分利用缓存了