//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();
}
}