设为首页 加入收藏

TOP

Hibernate中关联关系的CRUD(增删改查)(三)
2015-07-24 11:09:58 来源: 作者: 【 】 浏览:4
Tags:Hibernate 关联 关系 CRUD 删改
roup_id integer,

primary key (id)

)

?

alter table t_user

add constraint FK_e5f24mh6aryt9hsy99oydps6g

foreign key (group_id)

references t_group (id)

查看数据库中的信息:

select * from t_group;

?

select * from t_user;

?

数据保存成功。

?

8.双向关系在程序中要设置双向关联

9.双向关系要使用mappedBy

?

?

二、读取数据

还是一上面的例子做说明

1、读取User数据,是否能读取Group中的数据?

2、ManyToOne默认的情况下是可以取出One里的数据的,也就是说,获取User对象的数据的时候,是可以获取Group对象中的数据的。

3、读取Group数据的时候,是否能读取User中的数据?

4、cascade并不会影响读取,fetch管理读取

5、fetch的属性是Enum类型,分别为LAZY,EAGER。取值为LAZY时,不会获取User中的数据;取值为EAGER时,可以获取User的数据

6、JPA接口默认为一对多为Lazy,多对一为Eager,但是Hibernate反向工程生成Entity时,多对一为Lazy,需要手动改为Eager。

7、实验:

8、Group.java

package com.zgy.hibernate.model;

?

import java.util.HashSet;

import java.util.Set;

?

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;

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},

fetch=FetchType.EAGER

)

public Set getUsers() {

return users;

}

public void setUsers(Set users) {

this.users = users;

}

?

?

}

9、User.java

package com.zgy.hibernate.model;

?

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;

?

@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(cascade={CascadeType.ALL},

fetch=FetchType.LAZY

)

public Group getGroup() {

return group;

}

public void setGroup(Group group) {

this.group = group;

}

?

}

10、JUnit测试

@Test

public void testGetUser() {

testSaveGroup();

Session s = sf.openSession();

s.beginTransaction();

User u = (User)s.get(User.class, 1);

s.getTransaction().commit();

}

?

@Test

public void testGetGroup() {

testSaveGroup();

Session s = sf.openSession();

s.beginTransaction();

Group g = (Group)s.get(Group.class, 1);

s.getTransaction().commit();

for(User u : g.getUsers()){

System.out.println(u.getName());

}

}

11、结论

(1)将User设置为@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY的时候,将不再取得Group的属性。在session关闭前,如果使用到Group属性还是可以手动取得。Session关闭后将去得到Group的属性。

(2)@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY的时候,先取出的是User,再取出的是两者之间的关系。

Hibernate: select user0_.id as id1_1_0_, user0_.group_id as group_id3_1_0_, user0_.name as name2_1_0_ from t_user user0_ where user0_.id=?

Hibernate: select group0_.id as id1_0_0_, group0_.name as name2_0_0_, users1_.group_id as group_id3_0_1_, users1_.id as id1_1_1_, users1_.i

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【MongoDB数据库】JavaMongoDBCRU.. 下一篇Chapter3ProtectingtheData(2)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)