hibernate--关联关系的CRUD

xiaoxiao2021-02-28  85

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

多对一单向关联:

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 @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; } } 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 @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; } } 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();

转载请注明原文地址: https://www.6miu.com/read-56486.html

最新回复(0)