hibernate 一对多
来源:互联网 发布:淘宝房地产拍卖网 编辑:程序博客网 时间:2024/05/12 17:16
想做级联操作,则1.需要写cascade属性 2.在操作方法中必须要有两个表相关的体现
1.一对多
table 多的的那方要有1的那方的主键,,如1:1province中有pid,pname,,多:city中有cid,cname,pid;
在表对应的类时,1的那方除了pid,pname,外还有Set citylist=new HashSet();和set/get方法
多的那方只要cid,cname和对应setget方法,没有pid!
①在1的一方的class文件中加入多的一方的set,, 例子:private Set citylist=new HashSet();也需要加入对应setget方法。
②在1的一方的映射文件中对应<set name="ciitylist>
<key column="pid">//外键,即通过pid可以找到city的
<one-to-many class="....">//多的那方的class全名
</set>
多的那方和一般的一样cid,cname,pid,的setget方法和构造方法
在拿到1的那方的对象后,如province 的p对象,可以通过调用p.getCityList()方法拿到city的list遍历输出city
测试方法:
形式1:
。。调用方法openSession();
Query query=session.executequerty("from province where pid=?");
query.setInteger(0,1);
List<province> provinces=query.list();
for(province pro:provinces)
{
System.out.println(pro.getPname());
System.out.println(pro.getCityList().size());
for(Object obj:pro.getCityList()){
city city=(city)obj;
System.out.println(city.getCname());
}
}
session.close();
}
}
形式2:有返回值型
failed to lazily initialize a collection of role: com.hibernate.entity.province.cityList, no session or session was closed:懒加载,原因是在没访问多表则不加载,理想方法是在关闭session前加载一下。
province pro=(province) query.uniqueResult();
for(Object obj:pro.getCityList())
{
Hibernate.initialize(obj);
}
往往用一个参数,控制是否需要懒加载,,当不用加载多表时就不需要懒加载
--------------
public class testonetomany {
public static province queryProvince(Integer pid,Integer o)
{
Configuration conf=new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
Query query=session.createQuery("from province where pid=?");
query.setInteger(0, pid);
province pro=(province) query.uniqueResult();
if(o!=null){
for(Object obj:pro.getCityList())
{
Hibernate.initialize(obj);
}
}
session.close();
return pro;
}
public static void main(String[] args) {
province pro=queryProvince(1,1);
System.out.println(pro.getPname());
System.out.println(pro.getCityList().size());
for(Object obj:pro.getCityList())
{
city city=(city)obj;
System.out.println(city.getCname());
}
}
- Hibernate 一对多例
- hibernate一对多例子
- hibernate 一对多映射
- hibernate一对多
- hibernate一对多 更新
- Hibernate一对多映射
- Hibernate 一对多
- Hibernate 一对多映射
- Hibernate一对多(单向)
- Hibernate一对多(双向)
- hibernate一对多
- Hibernate 一对多映射
- hibernate 一对多映射
- hibernate一对多实例
- Hibernate一对多实例
- hibernate一对多
- hibernate 一对多删除
- Hibernate 一对多问题
- pip安装python包出现Cannot fetch index base URL http://pypi.python.org/simple/
- Android动画案例(五)布局动画与自定义动画
- nmap
- Codeforces455C. Civilization
- 设计模式小总结
- hibernate 一对多
- 数据库基本概念和操作
- 扩张表空间的三种方法
- 比特币解决方法推荐
- 常见对象-StringBuffer和String的相互转换
- 进程间通信方法一:匿名管道
- Scala中的数组、映射、元组、集合
- 创世纪
- Linux关机重启停机(shutdown reboot halt)流程分析