hibernate--关联关系的CRUD

来源:互联网 发布:mac 搜狗输入法切换 编辑:程序博客网 时间:2024/06/05 20:22

---------------------------------------------------------

多对一单向关联:

Group.java:

package com.bean;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;@Id@GeneratedValuepublic 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;}}
User.java:

package com.bean;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.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;@Entity@Table(name="t_user")public class User {private int id;private String name;private Group group;@ManyToOne(cascade={CascadeType.ALL})    //cascade---级联操作public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}@Id@GeneratedValuepublic 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;}}
hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>   <session-factory>     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>         <property name="connection.url">jdbc:mysql://localhost:3306/user</property>          <property name="connection.username">root</property>        <property name="connection.password">root</property>          <property name="dialect">org.hibernate.dialect.MySQLDialect</property>     <property name="show_sql">true</property>          <property name="hbm2ddl.auto">update</property>     <property name="show_sql">true</property>     <property name="format_sql">true</property>            <property name="current_session_context_class">thread</property>      <mapping class="com.bean.Group"/>     <mapping class="com.bean.User"/>     <!--  <mapping resource="com/bean/User.hbm.xml"/>    <mapping resource="com/bean/Group.hbm.xml"/>-->   </session-factory></hibernate-configuration>        
测试:
package com.test;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistryBuilder;import org.hibernate.tool.hbm2ddl.SchemaExport;import com.bean.Group;import com.bean.User;import com.bean.User2;public class Test_W_H {  public static void main(String []args) {   Configuration cfg = new Configuration();   cfg.configure(); //加载hibernate配置文件   SessionFactory sessionFactory = cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());      Session session = sessionFactory.getCurrentSession();   session.beginTransaction();  //开启事务      User user = new User();   user.setName("代里");      Group group = new Group();   group.setName("team1");   user.setGroup(group);   session.save(user);   session.getTransaction().commit(); // 事务提交   System.out.println("the end");}}
                    




-------------------------------------------------------------------------

一对多双向关联:

在Group.java增加属性:

private Set<User> users = new HashSet<User>();@OneToMany(mappedBy="group",cascade={CascadeType.ALL}             )public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}


测试:

   session.beginTransaction();  //开启事务      User user1 = new User();   user1.setName("代里");   User user2 = new User();   user2.setName("张三");      Group group = new Group();   group.setName("team1");   group.getUsers().add(user1);   group.getUsers().add(user2);   user1.setGroup(group);   user2.setGroup(group);     session.save(group);   session.getTransaction().commit(); // 事务提交



-----------------------------------------------------------------------

read读取:

OneToMany:需要配置fetch:(fetch默认状态为lazy)

@OneToMany(mappedBy="group",cascade={CascadeType.ALL},fetch=FetchType.EAGER             )

ManyToOne则不需要配置,因为fetch默认状态为eager


--------------------------------------------------------------------------------------------

级联删除(防止级联删除效应):

1、取消级联关系

   User user = (User)session.get(User.class, 7);      user.setGroup(null);   session.delete(user);   session.getTransaction().commit(); // 事务提交
2、设置Hql来控制。

session.createQuery("delete from User u where u.id = 8").executeUpdate();