• SpringDataJpa备忘录


    1. 单向多对一关系
    //产品类型 一的一方
    @Entity
    public class ProductDir {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    }
    //产品,多方
    @Entity
    public class Product {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    
        //一方的对象
        @ManyToOne //默认配置的ManyToOne 会自定键为外键,外键的名称=属性名_id
        //多个产品Product对应一个产品类型dir
        // 不能使用@Column(name = "dir_id")
        @JoinColumn(name = "dir_id")
        private ProductDir dir;
    }

    junit

    	@Test
    	public void testSaveProduct() {
    		Product product = new Product();
    		product.setName("牛逼");
    		productService.save(product);
    		System.out.println("保存成功->"+product);
    
    		Product product2 = new Product();
    		product2.setName("牛逼2");
    		product2.setDir(new ProductDir());
    		try {
    			productService.save(product2);
    		}catch (Exception e){
    			System.out.println("该操作会报错->因为一的那方没有id,即缺少外键关系");
    		}
    		Product product3 = new Product();
    		product3.setName("牛逼2");
    		ProductDir productDir = new ProductDir();
    		productDir.setName("牛逼的类型");
    		productDirService.save(productDir);
    		product3.setDir(productDir);//此时的产品类型有了id
    		productService.save(product3);
    		System.out.println("保存成功->"+product3);
    		System.out.println("保存成功->"+productDir);
    	}

    @ManyToOne(fetch = FetchType.EAGER) 默认抓取策略,及时加载,一条sql语句
    @OneToMany(fetch = FetchType.LAZY) 延时加载,多条sql语句(多的一方默认延时加载)
    1. 单向一对多关系
    //产品,多方
    @Entity
    public class Product2 {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    }
    //产品类型 一的一方
    @Entity
    public class ProductDir2 {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    
        //单向一对多
        @OneToMany
        //必须配置外键id,否则会多生成一张表吗,形成多对多的关系
        @JoinColumn(name = "dir_id")//建议在一的一方实例化集合
        //(便于后面保存操作)
        private Set products = new HashSet<>();
    
    }

    junit

    	@Test
    	public void testSaveProduct2() {
    		Product2 product11 = new Product2();
    		product11.setName("产品11");
    		Product2 product22 = new Product2();
    		product22.setName("产品22");
    
    		ProductDir2 productDir2 = new ProductDir2();
    		productDir2.setName("牛逼2");
    		productDir2.getProducts().add(product11);
    		productDir2.getProducts().add(product22);
    		product2Service.save(product11);//保存后得到主键
    		product2Service.save(product22);//即获得外键关系
    		productDir2Service.save(productDir2);
    		System.out.println("保存成功->"+productDir2);
    		System.out.println("保存成功->"+product11);
    		System.out.println("保存成功->"+product22);
    	}

    排序

        //单向一对多
        @OneToMany
        //必须配置外键id,否则会多生成一张表吗,形成多对多的关系
        @JoinColumn(name = "dir_id")//建议在一的一方实例化集合(便于后面保存操作)
        @OrderBy("id")//默认属性值,不写即升序,
        //@OrderBy("id DESC")
        private Set products = new HashSet<>();
    1. 双向一对多关系
    //产品,多方
    @Entity
    public class Product {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "dir_id")
        private ProductDir dir;
    }
    //产品类型 一的一方
    @Entity
    public class ProductDir {
    
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    
        @OneToMany(fetch = FetchType.LAZY,mappedBy = "dir")
        //双向一对多,不配置@JoinColumn,配置新的属性mappedBy = "dir"
        //表示一方的关系参照多方Product属性dir来管理
        private Set products = new HashSet<>();
    }
  • 相关阅读:
    awk去重以某列重复的行
    awk 统计文件中按照某列统计某列的和(sum)
    使用jdk压缩war包
    histoty显示时间戳
    awk统计文件中某关键词出现次数
    Jbox帮助文档,默认的属性含义
    net之session漫谈及分布式session解决方案
    StackExchange.Redis 基本使用 (一) (转)
    Sql Server 表创建以及Ef浅谈
    数据验证(自定义特性)
  • 原文地址:https://www.cnblogs.com/youxiu326/p/10540750.html
Copyright © 2020-2023  润新知