Hibernate集合映射之List
使用List和Map有很多共性,比如说不能再1方设置inverse="true"
不同的是,list可以保留元素的顺序,这个使通过一个idx字段来实现的,比如说Team和Student的1对多关系,我们给team加入学生的时候,需要记录加入的顺序,这时候我们可以使用list方式,并在student表中新增加一个idx字段(但在Student实体类中不定义idx属性)?
数据库结构:
?
create?table?teamList?(id?varchar(32),teamname?varchar(32));
create?table?studentList?(id?varchar(32),cardid?varchar(32),name?varchar(32),age?int,description?varchar(32),?team_id?varchar(32),idx?int);?
POJO
?
package?Collection.List;
import?java.util.ArrayList;
import?java.util.List;
import?java.util.Map;
public?class?Team?...{
???private?String?id;
???private?String?teamname;
???private?List?students=new?ArrayList();
public?String?getId()?...{
????return?id;
}
public?void?setId(String?id)?...{
????this.id?=?id;
}
public?String?getTeamname()?...{
????return?teamname;
}
public?void?setTeamname(String?teamname)?...{
????this.teamname?=?teamname;
}
public?List?getStudents()?...{
????return?students;
}
public?void?setStudents(List?students)?...{
????this.students?=?students;
}
}


package?Collection.List;
public?class?Student?...{
??private?String?id;
??private?String?name;
??private?String?description;
??private?int?age;
??private?String?cardid;
??private?Team?team;
public?String?getId()?...{
????return?id;
}
public?void?setId(String?id)?...{
????this.id?=?id;
}
public?String?getName()?...{
????return?name;
}
public?void?setName(String?name)?...{
????this.name?=?name;
}
public?String?getDescription()?...{
????return?description;
}
public?void?setDescription(String?description)?...{
????this.description?=?description;
}
public?int?getAge()?...{
????return?age;
}
public?void?setAge(int?age)?...{
????this.age?=?age;
}
public?String?getCardid()?...{
????return?cardid;
}
public?void?setCardid(String?cardid)?...{
????this.cardid?=?cardid;
}
public?Team?getTeam()?...{
????return?team;
}
public?void?setTeam(Team?team)?...{
????this.team?=?team;
}
}
?
Team.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">
<!--?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
<hibernate-mapping>
<class?name="Collection.List.Team"?table="teamList"?>
????<id?name="id"?unsaved-value="null">
??????<generator?class="uuid.hex"></generator>
????</id>
????<property?name="teamname"?type="string"?column="teamname"></property>
????<!--由于index需要team来维护,所以,使用list表示1对多时候,不能再1方设置inverse="true"-->
????<list?name="students"?table="studentList"?cascade="all"?>
??????<key?column="team_id"></key>
??????<!--?index代表key,element(或one-to-many)代表value-->
??????<!--?这里用cardid作为key,具体的student实例作为value?-->
??????<index?column="idx"?type="int"></index>
??????<one-to-many?class="Collection.List.Student"/>
????</list>
</class>
</hibernate-mapping>
?
Student.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">
<!--?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
<hibernate-mapping>
<class?name="Collection.List.Student"?table="studentList"?>
????<id?name="id"?unsaved-value="null">
??????<generator?class="uuid.hex"></generator>
????</id>
????<property?name="cardid"?type="string"?column="cardid"></property>
????<property?name="name"?type="string"?column="name"></property>
????<property?name="age"?type="int"?column="age"></property>
????<property?name="description"?type="string"?column="description"></property>?
????<many-to-one?name="team"?
?????????????????column="team_id"
?????????????????class="Collection.List.Team"?
?????????????????cascade="none"?
?????????????????fetch="join">
????</many-to-one>
</class>
</hibernate-mapping>
?
Hibernate.cfg.xml
?
<?xml?version='1.0'?encoding='UTF-8'?>
<!DOCTYPE?hibernate-configuration?PUBLIC
??????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
??????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--?Generated?by?MyEclipse?Hibernate?Tools.???????????????????-->
<hibernate-configuration>
<session-factory>
????<property?name="connection.username">root</property>
????<property?name="connection.url">
????????jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&useUnicode=true
????</property>
????<property?name="dialect">
????????org.hibernate.dialect.MySQLDialect
????</property>
????<property?name="myeclipse.connection.profile">mysql</property>
????<property&n
public?class?Team?...{
public?String?getId()?...{