hibernate 注解 级联保存

//bean
public class Person {

private String id;  
private City city;  
public Person() {        
}

@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "uuid")
@Column(name = "ID", length = 128)
public String getId() {
    return this.id;
}

public void setId(String id) {
    this.id = id;
}

@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name = "city_id")
public City getCity() {
    return city;
}
public void setCity(City city) {
    this.city = city;
}

class City {

private String id;
private Set<Person> persons=new HashSet<Person>();
public City() {
}

@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "uuid")
@Column(name = "ID", length = 128)
public String getId() {
    return this.id;
}

public void setId(String id) {
    this.id = id;
}
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "city")
public Set<Person> getPersons() {
    return persons;
}

public void setPersons(Set<Person> persons) {
    this.persons = persons;
}
@Test
public void test33(){
    SessionFactory sessionFactory=(SessionFactory)context.getBean("sessionFactory");
    Session session=sessionFactory.openSession();
    Transaction transaction=session.beginTransaction();

    City city=new City();
    city.setCode("set");
    city.setPname("set");
    Person person =new Person();
    person.setPname("set");
    Person person1 =new Person();
    person1.setPname("set222");     
    //方案一
    city.getPersons().add(person);
    city.getPersons().add(person1);
    person.setCity(city);
    person1.setCity(city);
    session.save(city);
    /*
    person.setCity(city);
    person1.setCity(city);
    放在此处会多生成两条update r_person sql
    */
    //执行sql 
    //  Hibernate: insert into scott.R_CITY (ID) values (?)
    //  Hibernate: insert into scott.R_PERSON (city_id,ID) values (?, ?)
    //  Hibernate: insert into scott.R_PERSON (city_id,ID) values (?, ?)
    //方案二 先保存一的一方 再保存多的一方
    session.save(city);
    session.save(person);
    session.save(person1);
    //执行sql
    //  Hibernate: insert into scott.R_CITY (ID) values (?)
    //  Hibernate: insert into scott.R_PERSON (city_id,ID) values (?, ?)
    //  Hibernate: insert into scott.R_PERSON (city_id,ID) values (?, ?)
    transaction.commit();
    session.close();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值