配置xml文件
有两个,在主配置文件中配置一对多的联系:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="star.july.d_one2many.User" table="o_user">
<id name="id" column="uid">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<!-- 一对多set集合映射
table:不需要配置
key,外键
cascade:
save-update:保存和更新操作
delete:删除操作
all:save-update+delete
-->
<set name="address" cascade="save-update">
<key column="uid"></key>
<one-to-many class="star.july.d_one2many.Address"/>
</set>
</class>
</hibernate-mapping>
另一个配置文件,存放地址的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="star.july.d_one2many.Address" table="t_address">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="zipcode" column="zipcode"></property>
<property name="phone" column="phone"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
创建实体类
在主类中创建关联对象:
package star.july.d_one2many;
import java.util.HashSet;
import java.util.Set;
public class User {
private int id;
private String name;
//关联对象
private Set<Address> address =new HashSet<Address>();
public Set<Address> getAddress() {
return address;
}
public void setAddress(Set<Address> address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", address=" + address
+ "]";
}
}
存放地址类
package star.july.d_one2many;
public class Address {
private int id;
private String name;
private String zipcode;
private String phone;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Address [id=" + id + ", name=" + name + ", zipcode=" + zipcode
+ ", phone=" + phone + ", address=" + address + "]";
}
}
测试:
package star.july.d_one2many;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import star.july.util.HibernateUtil;
//set集合
public class SetDemo {
//添加
@Test
public void test1(){
Session session = HibernateUtil.getSession();
//获取事务对象
Transaction ts = session.getTransaction();
try{
ts.begin();
//创建对象
User u = new User();
// u.setId(3);
u.setName("小年");
Address address = new Address();
address.setName("姜妮");
address.setPhone("1392388948");
address.setZipcode("524088");
address.setAddress("北凉龙虎山");
Address address2 = new Address();
address2.setName("大红薯");
address2.setPhone("1567384048");
address2.setZipcode("524000");
address2.setAddress("北莽");
//保存收货地址
u.getAddress().add(address);
u.getAddress().add(address2);
session.save(u);
// session.save(address);
ts.commit();
HibernateUtil.close(session);
}catch(Exception e){
e.printStackTrace();
ts.rollback();
}
}
//查询
@Test
public void test2(){
Session session = HibernateUtil.getSession();
//获取事务对象
Transaction ts = session.getTransaction();
try{
ts.begin();
User u = (User)session.get(User.class, 2);
Set<Address> ads = u.getAddress();
//对象遍历输出
for(Address a : ads){
System.out.println(a);
}
ts.commit();
HibernateUtil.close(session);
}catch(Exception e){
e.printStackTrace();
ts.rollback();
}
}
//修改
@Test
public void test3(){
Session session = HibernateUtil.getSession();
//获取事务对象
Transaction ts = session.getTransaction();
try{
ts.begin();
//先查询会员
User u = (User)session.get(User.class, 2);
//再修改
Address a = (Address) session.get(Address.class, 3);
//移除两者之间的关系,即把外键变为null
u.getAddress().remove(a);
//删除收货地址
session.delete(a);
ts.commit();
HibernateUtil.close(session);
}catch(Exception e){
e.printStackTrace();
ts.rollback();
}
}
}