hibernate--关联关系的CRUD

逃离我推掉我的手 2024-02-18 14:51 119阅读 0赞

-————————————————————————————

多对一单向关联:

Group.java:

  1. package com.bean;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.Id;
  7. import javax.persistence.JoinColumn;
  8. import javax.persistence.OneToMany;
  9. import javax.persistence.Table;
  10. @Entity
  11. @Table(name="t_group")
  12. public class Group {
  13. private int id;
  14. private String name;
  15. @Id
  16. @GeneratedValue
  17. public int getId() {
  18. return id;
  19. }
  20. public void setId(int id) {
  21. this.id = id;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. }

User.java:

  1. package com.bean;
  2. import javax.persistence.CascadeType;
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.Id;
  6. import javax.persistence.JoinColumn;
  7. import javax.persistence.ManyToOne;
  8. import javax.persistence.OneToMany;
  9. import javax.persistence.Table;
  10. import org.hibernate.annotations.Cascade;
  11. @Entity
  12. @Table(name="t_user")
  13. public class User {
  14. private int id;
  15. private String name;
  16. private Group group;
  17. @ManyToOne(cascade={CascadeType.ALL}) //cascade---级联操作
  18. public Group getGroup() {
  19. return group;
  20. }
  21. public void setGroup(Group group) {
  22. this.group = group;
  23. }
  24. @Id
  25. @GeneratedValue
  26. public int getId() {
  27. return id;
  28. }
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32. public String getName() {
  33. return name;
  34. }
  35. public void setName(String name) {
  36. this.name = name;
  37. }
  38. }

hibernate.cfg.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <property name="connection.url">jdbc:mysql://localhost:3306/user</property>
  9. <property name="connection.username">root</property>
  10. <property name="connection.password">root</property>
  11. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  12. <property name="show_sql">true</property>
  13. <property name="hbm2ddl.auto">update</property>
  14. <property name="show_sql">true</property>
  15. <property name="format_sql">true</property>
  16. <property name="current_session_context_class">thread</property>
  17. <mapping class="com.bean.Group"/>
  18. <mapping class="com.bean.User"/>
  19. <!-- <mapping resource="com/bean/User.hbm.xml"/>
  20. <mapping resource="com/bean/Group.hbm.xml"/>-->
  21. </session-factory>
  22. </hibernate-configuration>

测试:

  1. package com.test;
  2. import org.hibernate.Query;
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.cfg.AnnotationConfiguration;
  6. import org.hibernate.cfg.Configuration;
  7. import org.hibernate.service.ServiceRegistryBuilder;
  8. import org.hibernate.tool.hbm2ddl.SchemaExport;
  9. import com.bean.Group;
  10. import com.bean.User;
  11. import com.bean.User2;
  12. public class Test_W_H {
  13. public static void main(String []args) {
  14. Configuration cfg = new Configuration();
  15. cfg.configure(); //加载hibernate配置文件
  16. SessionFactory sessionFactory = cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());
  17. Session session = sessionFactory.getCurrentSession();
  18. session.beginTransaction(); //开启事务
  19. User user = new User();
  20. user.setName("代里");
  21. Group group = new Group();
  22. group.setName("team1");
  23. user.setGroup(group);
  24. session.save(user);
  25. session.getTransaction().commit(); // 事务提交
  26. System.out.println("the end");
  27. }
  28. }

Center

Center 1

-————————————————————————————————————

一对多双向关联:

在Group.java增加属性:

  1. private Set<User> users = new HashSet<User>();
  2. @OneToMany(mappedBy="group",
  3. cascade={CascadeType.ALL}
  4. )
  5. public Set<User> getUsers() {
  6. return users;
  7. }
  8. public void setUsers(Set<User> users) {
  9. this.users = users;
  10. }

测试:

  1. session.beginTransaction(); //开启事务
  2. User user1 = new User();
  3. user1.setName("代里");
  4. User user2 = new User();
  5. user2.setName("张三");
  6. Group group = new Group();
  7. group.setName("team1");
  8. group.getUsers().add(user1);
  9. group.getUsers().add(user2);
  10. user1.setGroup(group);
  11. user2.setGroup(group);
  12. session.save(group);
  13. session.getTransaction().commit(); // 事务提交

-———————————————————————————————————

read读取:

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

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

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

-—————————————————————————————————————————————-

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

1、取消级联关系

  1. User user = (User)session.get(User.class, 7);
  2. user.setGroup(null);
  3. session.delete(user);
  4. session.getTransaction().commit(); // 事务提交

2、设置Hql来控制。

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

发表评论

表情:
评论列表 (有 0 条评论,119人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernate annotation 关联关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置

    相关 Hibernate一对一关联关系

      Hibernate的一对一关联关系,分为基于外键的一对一关联关系和基于主键的一对一关联关系。在这篇文章中,我们以部门和部门经理的例子来说明,一个部门对应唯一一个部门经理,一

    相关 Hibernate 03-配置关联关系映射

    一、了解关联关系 类与类之间最普遍的关系就是关联关系,并且关联是有方向的。以部门(Dept)和员工(Emp)类为例,一个部门下有多个员工,而一个员工只能属于一个部门