Hibernate一对多保存思考题 Java框架

出道题给大家玩玩

public class Customer {
    private Long id;
    private String name;
    private Set<Linkman> linkmans = new HashSet<Linkman>(0); // 一对多
}
public class Linkman implements java.io.Serializable{
    private Long id;
    private String name;
    private Customer customer; // 多对一    
}
package test.java;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import util.HibernateUtils;
import entity.Customer;
import entity.Linkman;

/**
 * 请说明以下语句各显示发送多少条SQL语句,是否报错,外键是否保存
 * 并说明在Customer设置不维护外键inverse="true"的情况下的结果
 */
public class SaveTest {
    @Test
    public void saveTest() throws Exception {
        // 1.多对一先存多:
        saveCommand("lc", "sl", "sc");
        // 2.多对一先存一:
        saveCommand("lc", "sc", "sl");
        // 3.一对多先存多:
        saveCommand("cl", "sl", "sc");
        // 4.一对多先存一:
        saveCommand("cl", "sc", "sl");
        // 5.互关联先存多:
        saveCommand("cl", "lc", "sl", "sc");
        // 6.互关联先存一:
        saveCommand("cl", "lc", "sc", "sl");
        // 7.多对一只存多:
        saveCommand("lc", "sl");
        // 8.多对一只存一:
        saveCommand("lc", "sc");
        // 9.一对多只存多:
        saveCommand("cl", "sl");
        // 10.一对多只存一:
        saveCommand("cl", "sc");
        // 11.互关联只存多:
        saveCommand("cl", "lc", "sl");
        // 12.互关联只存一:
        saveCommand("cl", "lc", "sc");
    }

    public void saveCommand(String... commands) {
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();
        Customer customer = new Customer();
        customer.setName("客户");
        Linkman linkman1 = new Linkman();
        linkman1.setName("联系人1");
        Linkman linkman2 = new Linkman();
        linkman2.setName("联系人2");

        for (String command : commands) {
            switch (command) {
            case "lc": // 多对一
                linkman1.setCustomer(customer);
                break;
            case "cl": // 一对多
                customer.getLinkmans().add(linkman1);
                break;
            case "sc": // 存一
                session.save(customer);
                break;
            case "sl": // 存多
                session.save(linkman1);
                break;
            default:
                break;
            }
            System.out.println(" " + customer + "\n " + linkman1);
        }
        System.out.println("提交:");
        tx.commit();
        System.out.println(" " + customer + "\n " + linkman1);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)

前言 听标题的名字似乎是一个非常牛X复杂的功能,但是实际上它确实是非常复杂的,我们本节将演示如何实现对数据,进行组合查询(数据筛选) 我们都知道Excel...

2608
来自专栏张善友的专栏

ASP.NET MVC Preview生命周期分析

做ASP.NET WebForm开发都知道,ASP.NET有复杂的生命周期,学习ASP.NET MVC就要深入理解它的生命周期。今天从CodePlex上下载了A...

2117
来自专栏烙馅饼喽的技术分享

我在工作中使用的自己实现的超简易ORM工具

我在7月份到了家新公司,要维护一个在原来.net1.1上的系统。我进去一看代码就傻了眼了,满屏的SQL语句,看得脑袋嗡嗡的.但是苦于.net1.1,又不敢大动直...

3988
来自专栏跟着阿笨一起玩NET

动态调用WebService

http://linglong117.blog.163.com/blog/static/277145472009127514463/

1551
来自专栏游戏杂谈

使用ScriptableObject创建.asset文件

定义为public的变量就存储在xxx.asset中,通过 CommonConfig.Instance.Get 直接获取数据。

1105
来自专栏逸鹏说道

Z.ExtensionMethods 一个强大的开源扩展库

今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提...

2906
来自专栏Java成神之路

Java钉钉开发_03_通讯录管理之 人员管理 和 部门管理

2012
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证

注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力 一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双...

2175
来自专栏知识分享

关于Http 传输二维json

然后就在想是不是   String str = jsonObject1.toString();    jsonObject.put("param",str); ...

1084
来自专栏张善友的专栏

JavaScript 和asp.net配合编码字符串

     .net 的System.Text.ASCIIEncoding 和System.BitConvertor类配合在服务端加密字符串,客户端使用Javas...

2299

扫码关注云+社区