在项目的开发中多对一的单向关联映射是最常见的,关联映射!这个着重详细讲解一下!
例如,我们现在一个组(Group)和人(Person)
(Person表)
id | name |
1 | 张三 |
2 | 李四 |
(Group表)
id | name | p_id |
1 |
财务组 | 1 |
2 | 财务组 | 2 |
由上表我们发现,是不是出现数据的重复?财务组在重复!
所以,在多对一的单向映射中,我们通常是在多的一方加上外键来关联少的一方。
那么在这个关系中(Group)是少的一方,(Person)是多的一方,一个组里面可以有多个人!
(Group表)
id | name |
1 | 财务组 |
2 | 开发组 |
(Person表)
id | name | g_id |
1 |
张三 | 1 |
2 | 李四 | 1 |
上面这种关系才是正常的业务逻辑!
ok,下面来看我们的Annotations配置!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
@Entity
@Table
(name=
"t_user"
)
publicclass Person {
private
Integer id;
private
String name;
private
Integer age;
private
Group group;
@ManyToOne
public
Group getGroup() {
returngroup;
}
publicvoid setGroup(Groupgroup) {
this
.group = group;
}
@Id
@GeneratedValue
public
Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this
.id = id;
}
@Column
(name=
"name"
)
public
String getName() {
returnname;
}
publicvoid setName(Stringname) {
this
.name = name;
}
@Column
(name=
"age"
)
public
Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this
.age = age;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@Entity
@Table
(name=
"t_group"
)
publicclass Group {
private
Integer id;
private
String name;
@Id
@GeneratedValue
public
Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this
.id = id;
}
@Column
(name=
"name"
)
public
String getName() {
returnname;
}
publicvoid setName(Stringname) {
this
.name = name;
}
}
|
XML配置方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package
csg.hibernate.entity;
publicclass Person {
private
Integer id;
private
String name;
private
Integer age;
private
Group group;
public
Group getGroup() {
returngroup;
}
publicvoid setGroup(Groupgroup) {
this
.group = group;
}
public
Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this
.id = id;
}
public
String getName() {
returnname;
}
publicvoid setName(Stringname) {
this
.name = name;
}
public
Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this
.age = age;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package
csg.hibernate.entity;
publicclass Group {
private
Integer id;
private
String name;
public
Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this
.id = id;
}
public
String getName() {
returnname;
}
publicvoid setName(Stringname) {
this
.name = name;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?
xml
version
=
"1.0"
?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<
hibernate-mapping
package
=
"csg.hibernate.entity"
>
<
class
name
=
"Person"
table
=
"t_user"
>
<
id
name
=
"id"
>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"name"
/>
<
property
name
=
"age"
/>
<
many-to-one
name
=
"Group"
column
=
"group_id"
/>
</
class
>
</
hibernate-mapping
>
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?
xml
version
=
"1.0"
?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<
hibernate-mapping
package
=
"csg.hibernate.entity"
>
<
class
name
=
"Group"
table
=
"t_group"
>
<
id
name
=
"id"
>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"name"
/>
</
class
>
</
hibernate-mapping
>
|
到这里我们使用Junit测试一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
publicclass JuniTest {
privatestatic SessionFactory sessionFactory;
@BeforeClass
publicstaticvoid beforeClass() {
Configuration cfg=
new
Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();
}
@Test
public
void
add(){
try
{
Group group=
new
Group();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
group.setName(
"部门"
);
session.save(group);
Person person=
new
Person();
person.setAge(
12
);
person.setName(
"张三"
);
person.setGroup(group);
session.save(person);
session.getTransaction().commit();
}
catch
(HibernateException e){
e.printStackTrace();
}
}
@AfterClass
publicstaticvoid afterClass() {
sessionFactory.close();
}
}
|
ok!
本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1568855,如需转载请自行联系原作者