zoukankan      html  css  js  c++  java
  • Hibernate映射关系之多对多

    1、用户表user和优惠券coupon存在多对多的关系,一个用户可以拥有多个优惠券,一个优惠券可以从属于多个用户。

    2、user.java,创建了中间表tb_user_coupon

    (1)JoinTable表示中间表的

    (2)

    /**
         * 一个用户可以拥有多个优惠券 但优惠券只有自己的属性,没有用户的引用 单边的一对多关系
         */
        @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST })
        @JoinTable(name = "tb_user_coupon", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "coupon_id", referencedColumnName = "id"))
        // fetch配置加载方式(延迟或即时)
        // cascade配置级联方式,表示在增删查改user类时,会自动在数据库中保存、删除、修改、刷新属于他的Email对象
        private List<Coupon> coupons =new ArrayList<Coupon>() ;

    3、coupon.java

    (1)由于已经在user中配置了数据库表的映射,mappedBy指定user类里面coupon的变量名

    @ManyToMany(mappedBy="coupons")
    private Set<User> users=new HashSet<Post>();

    4、在中间表添加字段

    注意第三张表的几点配置

    (1)表名要与@JoinTable一致

    (2)两个@JoinTable的name分别保持一致,不然会产生其他的字段

    Done

    @Entity
    @Table(name = "tb_user_coupon")
    public class UserCoupon {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
    
        @ManyToOne
        @JoinColumn(name = "user_id",nullable=false)
        private User user;
        @ManyToOne
        @JoinColumn(name = "coupon_id",nullable=false)
        private Coupon coupon;
    
        @Column(updatable = false, nullable = false, columnDefinition = "timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
        @Temporal(TemporalType.TIMESTAMP)
        private Date createdDate = new Date();
    
    }

    Done

  • 相关阅读:
    5、视图
    4、数据更新
    3、聚合与排序
    2、查询基础
    1、数据库和SQL
    Day-13:组合查询
    Day-12:创建高级联结
    Day-11:联结表
    Day-10:使用子查询
    Day-9:分组数据
  • 原文地址:https://www.cnblogs.com/xingyyy/p/3903519.html
Copyright © 2011-2022 走看看