Hibernate—-@Annotation—-一对多—-级联



Hibernate—-@Annotation—-一对多—-级联 一对多,双向,”一”的一方

Java代码
1.package com.pegasus.domain;
2.
3.import java.util.HashSet;
4.import java.util.Set;
5.
6.import javax.persistence.CascadeType;
7.import javax.persistence.Entity;
8.import javax.persistence.FetchType;
9.import javax.persistence.GeneratedValue;
10.import javax.persistence.Id;
11.import javax.persistence.JoinColumn;
12.import javax.persistence.OneToMany;
13.import javax.persistence.Table;
14.
15.//在实体类的类名前
16.//标注是实体
17.//对应的表名
18.//相当于xml的
19.//
20.@Entity
21.@Table(name=”t_group”)
22.public class Group {
23. private int id;
24. private String name;
25. private Set users = new HashSet();
26.
27. //在主键的get方法前
28. //标注主键,以及生成主键策略
29. //相当于
30. @Id
31. @GeneratedValue
32. public int getId() {
33. return id;
34. }
35. public void setId(int id) {
36. this.id = id;
37. }
38.
39. //在一般属性的get方法前
40. //一般的列名前不需要标注
41. //相当于 42. public String getName() {
43. return name;
44. }
45. public void setName(String name) {
46. this.name = name;
47. }
48.
49. //在一对多”一”的一方关联的集合前
50. //使用@OneToMany标注,并标明”mappedBy”,即关联的”多”的一方所对应的类的属性
51. //cascade参数标明级联的方式,如果不需要级联可以省略
52. //相当于
53. //
54. //
55. //

56. @OneToMany(mappedBy=”group”,
57. cascade={CascadeType.ALL}
58. )
59.
60. public Set getUsers() {
61. return users;
62. }
63. public void setUsers(Set users) {
64. this.users = users;
65. }
66.}
package com.pegasus.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

//在实体类的类名前
//标注是实体
//对应的表名
//相当于xml的
//
@Entity
@Table(name=”t_group”)
public class Group {
private int id;
private String name;
private Set users = new HashSet();

//在主键的get方法前
//标注主键,以及生成主键策略
//相当于
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

//在一般属性的get方法前
//一般的列名前不需要标注
//相当于 public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

//在一对多”一”的一方关联的集合前
//使用@OneToMany标注,并标明”mappedBy”,即关联的”多”的一方所对应的类的属性
//cascade参数标明级联的方式,如果不需要级联可以省略
//相当于
//
//
//

@OneToMany(mappedBy=”group”,
cascade={CascadeType.ALL}
)

public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}

一对多,双向,”多”的一方

Java代码
1.package com.pegasus.domain;
2.
3.import javax.persistence.CascadeType;
4.import javax.persistence.Entity;
5.import javax.persistence.FetchType;
6.import javax.persistence.GeneratedValue;
7.import javax.persistence.Id;
8.import javax.persistence.ManyToOne;
9.import javax.persistence.Table;
10.//在实体类的类名前
11.//标注是实体
12.//对应的表名
13.//相当于xml的
14.//
15.@Entity
16.@Table(name=”t_user”)
17.public class User {
18. private int id;
19. private String name;
20. private Group group;
21.
22. //在主键的get方法前
23. //标注主键,以及生成主键策略
24. //相当于
25. @Id
26. @GeneratedValue
27. public int getId() {
28. return id;
29. }
30. public void setId(int id) {
31. this.id = id;
32. }
33.
34. //在一般属性的get方法前
35. //一般的列名前不需要标注
36. //相当于 37. public String getName() {
38. return name;
39. }
40. public void setName(String name) {
41. this.name = name;
42. }
43. //在一对多”多”的一方关联的属性get方法前
44. //使用@ManyToOne标注
45. //cascade参数标明级联的方式,如果不需要级联可以省略
46. //相当于
47. @ManyToOne(cascade={CascadeType.ALL})
48. public Group getGroup() {
49. return group;
50. }
51. public void setGroup(Group group) {
52. this.group = group;
53. }
54.}
package com.pegasus.domain;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
//在实体类的类名前
//标注是实体
//对应的表名
//相当于xml的
//
@Entity
@Table(name=”t_user”)
public class User {
private int id;
private String name;
private Group group;

//在主键的get方法前
//标注主键,以及生成主键策略
//相当于
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

//在一般属性的get方法前
//一般的列名前不需要标注
//相当于 public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//在一对多”多”的一方关联的属性get方法前
//使用@ManyToOne标注
//cascade参数标明级联的方式,如果不需要级联可以省略
//相当于
@ManyToOne(cascade={CascadeType.ALL})
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
单元测试类

Java代码
1.package com.pegasus.domain;
2.
3.import org.hibernate.Session;
4.import org.hibernate.SessionFactory;
5.import org.hibernate.cfg.AnnotationConfiguration;
6.import org.hibernate.tool.hbm2ddl.SchemaExport;
7.import org.junit.AfterClass;
8.import org.junit.BeforeClass;
9.import org.junit.Test;
10.
11.public class HibernateORMappingTest {
12. private static SessionFactory sessionFactory;
13.
14. @BeforeClass
15. public static void beforeClass() {
16. new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
17. sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
18. }
19. @AfterClass
20. public static void afterClass() {
21. sessionFactory.close();
22. }
23. /**级联保存*/
24. @Test
25. public void testSaveUser() {
26. System.out.print(“begin to testSaveUser()”);
27. User u = new User();
28. u.setName(“u1″);
29. Group g = new Group();
30. g.setName(“g1″);
31. u.setGroup(g);
32. Session s = sessionFactory.getCurrentSession();
33. s.beginTransaction();
34. //s.save(g);
35. s.save(u);
36. s.getTransaction().commit();
37. }
38.
39.// @Test
40.// public void testSaveGroup() {
41.// System.out.print(“begin to testSaveGroup()”);
42.// User u1 = new User();
43.// u1.setName(“u1″);
44.// User u2 = new User();
45.// u2.setName(“u2″);
46.// Group g = new Group();
47.// g.setName(“g1″);
48.// g.getUsers().add(u1);
49.// g.getUsers().add(u2);
50.// u1.setGroup(g);
51.// u2.setGroup(g);
52.// Session s = sessionFactory.getCurrentSession();
53.// s.beginTransaction();
54.// s.save(g);
55.// s.getTransaction().commit();
56.// }
57. /**级联查询*/
58. @Test
59. public void testGetUser() {
60. System.out.print(“begin to testGetUser()”);
61.// testSaveGroup();
62.
63. Session s = sessionFactory.getCurrentSession();
64. s.beginTransaction();
65. User u = (User)s.get(User.class, 1);
66.
67. s.getTransaction().commit();
68. System.out.println(u.getGroup().getName());
69. }
70.
71.// @Test
72.// public void testDeleteUser() {
73.// System.out.print(“begin to testDeleteUser()”);
74.// testSaveGroup();
75.//
76.// Session s = sessionFactory.getCurrentSession();
77.// s.beginTransaction();
78.// //User u = (User)s.load(User.class, 1);
79.// //u.setGroup(null);
80.// //s.delete(u);
81.// s.createQuery(“delete from User u where u.id = 1″).executeUpdate();
82.// s.getTransaction().commit();
83.//
84.// }
85.
86. /**级联修改*/
87. @Test
88. public void testUpdateUser() {
89. System.out.print(“begin to testUpdateUser()”);
90.// testSaveGroup();
91.
92. Session s = sessionFactory.getCurrentSession();
93. s.beginTransaction();
94. User u = (User)s.get(User.class, 1);
95.
96. s.getTransaction().commit();
97.
98. u.setName(“user”);
99. u.getGroup().setName(“group”);
100.
101. Session s2 = sessionFactory.getCurrentSession();
102. s2.beginTransaction();
103. s2.update(u);
104.
105. s2.getTransaction().commit();
106. }
107.
108. /**级联删除*/
109. @Test
110. public void testDeleteGroup() {
111. System.out.print(“begin to testDeleteGroup()”);
112. testSaveGroup();
113.
114. Session s = sessionFactory.getCurrentSession();
115. s.beginTransaction();
116. //User u = (User)s.load(User.class, 1);
117. //u.setGroup(null);
118. //s.delete(u);
119. Group g = (Group)s.load(Group.class, 1);
120. s.delete(g);
121. //s.createQuery(“delete from User u where u.id = 1″).executeUpdate();
122. s.getTransaction().commit();
123.
124. }
125.
126.
127.// @Test
128.// public void testSchemaExport() {
129.// new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
130.// }
131.
132.// public static void main(String[] args) {
133.// beforeClass();
134.// }
135.}
package com.pegasus.domain;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateORMappingTest {
private static SessionFactory sessionFactory;

@BeforeClass
public static void beforeClass() {
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void afterClass() {
sessionFactory.close();
}
/**级联保存*/
@Test
public void testSaveUser() {
System.out.print(“begin to testSaveUser()”);
User u = new User();
u.setName(“u1″);
Group g = new Group();
g.setName(“g1″);
u.setGroup(g);
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
//s.save(g);
s.save(u);
s.getTransaction().commit();
}

// @Test
// public void testSaveGroup() {
// System.out.print(“begin to testSaveGroup()”);
// User u1 = new User();
// u1.setName(“u1″);
// User u2 = new User();
// u2.setName(“u2″);
// Group g = new Group();
// g.setName(“g1″);
// g.getUsers().add(u1);
// g.getUsers().add(u2);
// u1.setGroup(g);
// u2.setGroup(g);
// Session s = sessionFactory.getCurrentSession();
// s.beginTransaction();
// s.save(g);
// s.getTransaction().commit();
// }
/**级联查询*/
@Test
public void testGetUser() {
System.out.print(“begin to testGetUser()”);
// testSaveGroup();

Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
User u = (User)s.get(User.class, 1);

s.getTransaction().commit();
System.out.println(u.getGroup().getName());
}


// @Test
// public void testDeleteUser() {
// System.out.print(“begin to testDeleteUser()”);
// testSaveGroup();
//
// Session s = sessionFactory.getCurrentSession();
// s.beginTransaction();
// //User u = (User)s.load(User.class, 1);
// //u.setGroup(null);
// //s.delete(u);
// s.createQuery(“delete from User u where u.id = 1″).executeUpdate();
// s.getTransaction().commit();
//
// }

/**级联修改*/
@Test
public void testUpdateUser() {
System.out.print(“begin to testUpdateUser()”);
// testSaveGroup();

Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
User u = (User)s.get(User.class, 1);

s.getTransaction().commit();

u.setName(“user”);
u.getGroup().setName(“group”);

Session s2 = sessionFactory.getCurrentSession();
s2.beginTransaction();
s2.update(u);

s2.getTransaction().commit();
}

/**级联删除*/
@Test
public void testDeleteGroup() {
System.out.print(“begin to testDeleteGroup()”);
testSaveGroup();

Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
//User u = (User)s.load(User.class, 1);
//u.setGroup(null);
//s.delete(u);
Group g = (Group)s.load(Group.class, 1);
s.delete(g);
//s.createQuery(“delete from User u where u.id = 1″).executeUpdate();
s.getTransaction().commit();

}

// @Test
// public void testSchemaExport() {
// new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
// }

// public static void main(String[] args) {
// beforeClass();
// }
}
hibernate.cfg.xml

Xml代码
1.
2. 3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5.
6.
7.
8.
9.
10.
11. com.mysql.jdbc.Driver 12. jdbc:mysql://localhost/hibtest 13. root 14. 123 15. org.hibernate.dialect.MySQLDialect 16.
17.
18. 1 19.
20.
21. thread 22.
23.
24. org.hibernate.cache.NoCacheProvider 25.
26.
27. true 28.