设为首页 加入收藏

TOP

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

关联关系的CRUD(增删改查)

一、增加数据

1、User和Group的关联关系:User对Group是Many-To-One,Group对User是One-To-Many

2、默认情况下,不会自动保存尚未保存关联的对象。因为对象没有保存的情况下,对象是Transient状态,此时数据库中并没有存储,所以获取不到该对象。

3、使用级联cascade方式可以自动将关联的对象进行存储。其取值有ALL,PERSIST,REFRESH,REMOVE,DETACH,MERGE这几种取值。其中,ALL表示在任何情况下进行级联操作。PERSIST表示持久化的时候进行级联。

3、实验1(只保存User对象的情况下,自动保存Group)

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;

@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")

public Set getUsers() {

return users;

}

public void setUsers(Set users) {

this.users = users;

}

?

?

}

?

4、User.java

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

public Group getGroup() {

return group;

}

public void setGroup(Group group) {

this.group = group;

}

?

}

5、JUnit测试

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 user = new User();

user.setName("user1");

Group group = new Group();

group.setName("group");

user.setGroup(group);

Session s = sf.openSession();

s.beginTransaction();

//s.save(group);

s.save(user);

s.getTransaction().commit();

}

?

@AfterClass

public static void afterClass(){

sf.close();

}

?

}

6、结果:

(1)不保存group的情况下,运行JUnit会报错

(2)在User.java中加入@ManyToOne(cascade={CascadeType.ALL}),那么再次运行JUnit时将不会再报错。

(3)查看生成的sql语句:

Hibernate: create table t_group (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: create table t_user (id integer not null auto_increment, name varchar(255), group_id integer, primary key (id))

Hibernate: alt

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

评论

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

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)