many2one和one2many其实没什么差别,最大的不同就是站在不同的角度而已
例如:one2many视角:一棵苹果树有很多苹果,这是一对多关系(站在树的角度上看)
many2one视角:许多苹果在一棵苹果树上,这是多对一关系(站在苹果的角度上看)
代码分析需求
1. PO类
苹果树
private int id;
private String name;
private Set<fruit> fruit=new HashSet<fruit>();
配置
<set name="fruit" >
<key column="t_f_id"></key>
<one-to-many class="fruit"/>
</set>
苹果
private int id;
private String name;
private Tree tree=new Tree();
配置
<many-to-one name="tree" class="Tree" column="t_f_id" cascade="all"></many-to-one>
2. 运行类(one2many和many2one在po上并没有什么不同,他们的区别表现在运行类上)
fruit f1 = new fruit();
f1.setName("苹果1");
fruit f2 = new fruit();
f2.setName("苹果2");
Tree t = new Tree();
t.setName("苹果树");
f1.setTree(t);
session.save(f1);
session.save(f2);
例如:one2many视角:一棵苹果树有很多苹果,这是一对多关系(站在树的角度上看)
many2one视角:许多苹果在一棵苹果树上,这是多对一关系(站在苹果的角度上看)
代码分析需求
1. PO类
苹果树
private int id;
private String name;
private Set<fruit> fruit=new HashSet<fruit>();
配置
<set name="fruit" >
<key column="t_f_id"></key>
<one-to-many class="fruit"/>
</set>
苹果
private int id;
private String name;
private Tree tree=new Tree();
配置
<many-to-one name="tree" class="Tree" column="t_f_id" cascade="all"></many-to-one>
2. 运行类(one2many和many2one在po上并没有什么不同,他们的区别表现在运行类上)
fruit f1 = new fruit();
f1.setName("苹果1");
fruit f2 = new fruit();
f2.setName("苹果2");
Tree t = new Tree();
t.setName("苹果树");
//注意此处是高能区:这里也是多对一重要体现,f2.setTree(t);苹果包含苹果树,这就是站在苹果视角上看(多包涵一),反过来如果一对多:t.getfruit.add(f1);苹果树包含苹果,那么就是一包含多;其实实际就是谁是控制类而已---》多为控制类则多对一,一为控制类则一对多,控制类的表现就在于集合为 控制类.add(被控制类) 非集合 控制类.set被控制类(被控制类值);
f2.setTree(t);f1.setTree(t);
session.save(f1);
session.save(f2);