er table t_user add constraint FK_e5f24mh6aryt9hsy99oydps6g foreign key (group_id) references t_group (id)
Hibernate: insert into t_group (name) values (?)
Hibernate: insert into t_user (group_id, name) values (?, ?)
?
7、实验2(仅保存Group对象的情况下,自动保存User)
(1)修改Group.java
package com.zgy.hibernate.model;
?
import java.util.HashSet;
import java.util.Set;
?
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.CascadeType;
@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;
private Set users = new HashSet();
@Id
@GeneratedValue
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;
}
@OneToMany(mappedBy="group",
cascade={CascadeType.ALL}
)
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
?
?
}
(2)去除User.java中加入的cascade={CascadeType.ALL}这段Annotation
package com.zgy.hibernate.model;
?
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
?
@Entity
@Table(name="t_user")
public class User {
private int id;
private String name;
private Group group;
@Id
@GeneratedValue
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;
}
@ManyToOne
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
?
}
(3)测试
要建立User和Group两者的双向关系,并且只保存Group对象
package com.zgy.hibernate.model;
?
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
?
public class ORMapppingTest {
?
public static SessionFactory sf = null;
@BeforeClass
public static void beforeClass(){
Configuration configure =new Configuration().configure();
new SchemaExport(configure).create(true, true);
sf = configure.buildSessionFactory();
}
@Test
public void testSaveUser() {
User user1 = new User();
user1.setName("user1");
User user2 = new User();
user2.setName("user2");
Group group = new Group();
group.setName("group1");
group.getUsers().add(user1);
group.getUsers().add(user2);
user1.setGroup(group);
user2.setGroup(group);
Session s = sf.openSession();
s.beginTransaction();
s.save(group);
//s.save(user);
s.getTransaction().commit();
}
?
@AfterClass
public static void afterClass(){
sf.close();
}
?
}
?
(4)观察结果
生成的SQL语句:
?
create table t_group (
id integer not null auto_increment,
name varchar(255),
primary key (id)
)
?
create table t_user (
id integer not null auto_increment,
name varchar(255),
g