<idbag>
映射定义了代理键,因此它总是可以很高效的被更新。事实上,<idbag>
拥有着最好的性能表现。
请注意:对于一对多关联来说,“主键”很可能并不是数据库表的物理主键。但就算在此情况下,上面的分类仍然是有用的。(它仍然反映了 Hibernate 在集合的各数据行中是如何进行“定位”的。)
eg:
1、Set
<set name="setemps" table="emp" cascade="all" fetch="join"> <key> <column name="deptno" precision="2" scale="0" not-null="true" /> </key> <one-to-many class="org.han.one_to_many.Emp" /> </set>2、Map
<map name="mapeps" table="emp"> <key column="deptno"></key> <map-key column="empno" type="string"></map-key> <one-to-many class="org.han.one_to_many.Emp" /> </map>
3、Bag
对应的集合属性是List
4、List
<list name="listemps" table="emp"> <key column="deptno"></key> <list-index column="empno"base="100"></list-index> <one-to-many class="org.han.one_to_many.Emp" /> </list>
list-index:集合的索引
base:索引的起始位置,不能超过empno记录的最小值
java结果:
mysql> select * from emp where deptno=10;
+-------+--------+-----------+------+------------+---------+--------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+-----------+------+------------+---------+--------+--------+
| 7782 | CLARK | MANAGER | 7839| 1981-06-09 | 2450.00 | 321.00 | 10 |
| 7839 | KING| PRESIDENT | NULL | 1981-11-17 | 5000.00 | 123.00 | 10 |
| 7934 | MILLER | CLERK | 7782| 1982-01-23 | 1300.00 | 123.00 | 10 |
+-------+--------+-----------+------+------------+---------+--------+--------+
集合元素结构:[100...NULL...7781,Emp,7783....NULL....7838,Emp,7840...NULL...7934,Emp]