hibernate List,Set,Map集合的配置实例
2008-12-29 11:04
337 查看
List,Set,Map的配置实例
OR映射的设置
一个对象对应一张表
User <-----> Person1
一个对象对应两张表
User <-----> Person1 , Phone1
Person1 :ID ,Name
Phone1 :PersonID PK,PhoneCode PK
自然主键或物理主键
在User对象中需要添加一个映射Phone1表的属性(集合属性)
集合属性有三种:List,Set,Map
List 有元素下标
Map 有键值
Set 没有重复值即可
Phone1 :PersonID PK,PhoneCode PK ---> Set
Phone2 :PersonID PK, PhoneOrder PK , PhoneCode ---> List
Phone3 : PersonID PK, PhoneType PK , PhoneCode ----> Map
下面是Set集合
<hibernate-mapping>
<class name="my.User" table="Person1" schema="dbo" catalog="Demo">
<id name="uid" type="int">
<column name="ID" />
<generator class="assigned"></generator>
</id>
<property name="uname" type="string">
<column name="Name" length="50" not-null="true" />
</property>
<set name="phoneSet" table="Phone1" >
<key column="PersonID" />
<element column="PhoneCode" type="string" />
</set>
</class>
</hibernate-mapping>
下面是List集合
<hibernate-mapping package="my" >
<class name="my.User" table="Person1" >
<id name="uid" column="ID" type="int" >
<generator class="assigned" />
</id>
<property name="uname" column="Name" type="string" length="50" />
<list name="phones" table="Phone1">
<key column="PID" /> //联合主键PID,ORD 其中ORD是索引列如果使用
list集合就必须手动添加该列
<index column="ORD" />
<element column="Code" type="string" length="50" />
</list>
</class>
</hibernate-mapping>
下面是Map集合
<hibernate-mapping package="my" >
<class name="User" table="Person1" >
<id name="uid" column="ID" type="int" >
<generator class="assigned" />
</id>
<property name="uname" column="Name" type="string" length="50" />
<map name="phones" table="Phone3" cascade="save-update" inverse="true" >
<key column="PID" />
<map-key column="Type" type="string" />
<element column="Code" type="string" />
</map>
</class>
</hibernate-mapping>
User.java
public class User {
private int uid;
private String uname;
//private List phones = new ArrayList();
//private Set phones = new HashSet();
private Map phones=new Hashtable();
public User(){}
public User(int id,String name){
this.setUid(id);
this.setUname(name);
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Map getPhones() {
return phones;
}
public void setPhones(Map phones) {
this.phones = phones;
}
}
Test.java
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//1:读配置文件
Configuration config=new Configuration().configure();
//2:创建会话工厂
SessionFactory sf=config.buildSessionFactory();
//3:获取会话对象
Session se=sf.openSession();
/*
-----List--------
User user=(User)se.get(User.class, 1);
List phones=new ArrayList();
phones.add("022-12345678");
phones.add("13812345678");
user.setPhones(phones);
se.beginTransaction().commit();
-----Set--------
User u=new User(4,"ddd");
Set phoneSet=new HashSet();
phoneSet.add("022-21331111");
phoneSet.add("13511112222");
u.setPhoneSet(phoneSet);
op.AddUser(u);
*/
//4:保存,修改和删除一条记录
User u=new User(3,"ccc");
Map phoneMap=new Hashtable();
phoneMap.put("家庭电话", "12345678");
phoneMap.put("工作电话", "22222222");
u.setPhones(phoneMap);
addOneUser(se,u);
//5:
// Phone p=(Phone)se.get(Phone.class, 4);
// System.out.println(p.getSn()+":"+p.getCode()+","+p.getUser().getUname());
showAllUser(se);
}
public static void delOneUser(Session se,User user){
//4.2 删除一条记录
se.delete(user);
se.beginTransaction().commit();
}
public static void updOneUser(Session se,User user){
//4.2 修改一条记录
se.update(user);
se.beginTransaction().commit();
}
public static void addOneUser(Session se,User user){
//4.2 插入一条记录
se.save(user);
se.beginTransaction().commit();
}
public static void showAllUser(Session se){
//4:获取查询对象
Query query=se.createQuery("from User");
//5:获取查询结果
List list= query.list();
//6:处理查询结果
// 当集合是Map时
for(Iterator iter=list.iterator();iter.hasNext();){
User temp=(User)iter.next();
Map phoneMap=temp.getPhones();
String strPhones="";
Iterator ite= phoneMap.values().iterator();
while(ite.hasNext()){
String phone =(String)ite.next();
strPhones += phone+",";
}
System.out.println(temp.getUid()+":"+temp.getUname()+","+strPhones);
}
// 当集合是Set时
// for(Iterator iter=list.iterator();iter.hasNext();){
// User temp=(User)iter.next();
// Set phoneSet=temp.getPhones();
// String strPhones="";
// Iterator ite= phoneSet.iterator();
// while(ite.hasNext()){
// Phone phone=(Phone)ite.next();
// strPhones += phone.getCode()+",";
// }
// System.out.println(temp.getUid()+":"+temp.getUname()
+","+strPhones);
//
// }
}
}
OR映射的设置
一个对象对应一张表
User <-----> Person1
一个对象对应两张表
User <-----> Person1 , Phone1
Person1 :ID ,Name
Phone1 :PersonID PK,PhoneCode PK
自然主键或物理主键
在User对象中需要添加一个映射Phone1表的属性(集合属性)
集合属性有三种:List,Set,Map
List 有元素下标
Map 有键值
Set 没有重复值即可
Phone1 :PersonID PK,PhoneCode PK ---> Set
Phone2 :PersonID PK, PhoneOrder PK , PhoneCode ---> List
Phone3 : PersonID PK, PhoneType PK , PhoneCode ----> Map
下面是Set集合
<hibernate-mapping>
<class name="my.User" table="Person1" schema="dbo" catalog="Demo">
<id name="uid" type="int">
<column name="ID" />
<generator class="assigned"></generator>
</id>
<property name="uname" type="string">
<column name="Name" length="50" not-null="true" />
</property>
<set name="phoneSet" table="Phone1" >
<key column="PersonID" />
<element column="PhoneCode" type="string" />
</set>
</class>
</hibernate-mapping>
下面是List集合
<hibernate-mapping package="my" >
<class name="my.User" table="Person1" >
<id name="uid" column="ID" type="int" >
<generator class="assigned" />
</id>
<property name="uname" column="Name" type="string" length="50" />
<list name="phones" table="Phone1">
<key column="PID" /> //联合主键PID,ORD 其中ORD是索引列如果使用
list集合就必须手动添加该列
<index column="ORD" />
<element column="Code" type="string" length="50" />
</list>
</class>
</hibernate-mapping>
下面是Map集合
<hibernate-mapping package="my" >
<class name="User" table="Person1" >
<id name="uid" column="ID" type="int" >
<generator class="assigned" />
</id>
<property name="uname" column="Name" type="string" length="50" />
<map name="phones" table="Phone3" cascade="save-update" inverse="true" >
<key column="PID" />
<map-key column="Type" type="string" />
<element column="Code" type="string" />
</map>
</class>
</hibernate-mapping>
User.java
public class User {
private int uid;
private String uname;
//private List phones = new ArrayList();
//private Set phones = new HashSet();
private Map phones=new Hashtable();
public User(){}
public User(int id,String name){
this.setUid(id);
this.setUname(name);
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Map getPhones() {
return phones;
}
public void setPhones(Map phones) {
this.phones = phones;
}
}
Test.java
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//1:读配置文件
Configuration config=new Configuration().configure();
//2:创建会话工厂
SessionFactory sf=config.buildSessionFactory();
//3:获取会话对象
Session se=sf.openSession();
/*
-----List--------
User user=(User)se.get(User.class, 1);
List phones=new ArrayList();
phones.add("022-12345678");
phones.add("13812345678");
user.setPhones(phones);
se.beginTransaction().commit();
-----Set--------
User u=new User(4,"ddd");
Set phoneSet=new HashSet();
phoneSet.add("022-21331111");
phoneSet.add("13511112222");
u.setPhoneSet(phoneSet);
op.AddUser(u);
*/
//4:保存,修改和删除一条记录
User u=new User(3,"ccc");
Map phoneMap=new Hashtable();
phoneMap.put("家庭电话", "12345678");
phoneMap.put("工作电话", "22222222");
u.setPhones(phoneMap);
addOneUser(se,u);
//5:
// Phone p=(Phone)se.get(Phone.class, 4);
// System.out.println(p.getSn()+":"+p.getCode()+","+p.getUser().getUname());
showAllUser(se);
}
public static void delOneUser(Session se,User user){
//4.2 删除一条记录
se.delete(user);
se.beginTransaction().commit();
}
public static void updOneUser(Session se,User user){
//4.2 修改一条记录
se.update(user);
se.beginTransaction().commit();
}
public static void addOneUser(Session se,User user){
//4.2 插入一条记录
se.save(user);
se.beginTransaction().commit();
}
public static void showAllUser(Session se){
//4:获取查询对象
Query query=se.createQuery("from User");
//5:获取查询结果
List list= query.list();
//6:处理查询结果
// 当集合是Map时
for(Iterator iter=list.iterator();iter.hasNext();){
User temp=(User)iter.next();
Map phoneMap=temp.getPhones();
String strPhones="";
Iterator ite= phoneMap.values().iterator();
while(ite.hasNext()){
String phone =(String)ite.next();
strPhones += phone+",";
}
System.out.println(temp.getUid()+":"+temp.getUname()+","+strPhones);
}
// 当集合是Set时
// for(Iterator iter=list.iterator();iter.hasNext();){
// User temp=(User)iter.next();
// Set phoneSet=temp.getPhones();
// String strPhones="";
// Iterator ite= phoneSet.iterator();
// while(ite.hasNext()){
// Phone phone=(Phone)ite.next();
// strPhones += phone.getCode()+",";
// }
// System.out.println(temp.getUid()+":"+temp.getUname()
+","+strPhones);
//
// }
}
}
相关文章推荐
- Hibernate在一对多映射下集合Set,List,Map的配置
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)
- Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- hibernate第二天——值类型的集合(set,map,list,bag,sort,order-by),实体类型集合,关联关系,3l类型Long,inverse,级联
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- spring List,Set,Map,Properties,array的使用配置文件注入实例
- Spring集合 (List,Set,Map,Properties) 实例
- 关于hibernate中set、list、map标签的用法与配置含义
- Spring集合 (List,Set,Map,Properties) 实例
- 配置spring的配置list,map,set,props集合属性
- Hibernate映射 --- 集合映射(Set List Map )
- spring List,Set,Map,Properties,array的使用配置文件注入实例
- hibernate集合映射set和list配置总结
- Hibernate常见的集合映射 Set,List,Array,Map,Bag
- Hibernate常见的集合映射主要有Set,List,Array,Map,Bag
- Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)