zoukankan      html  css  js  c++  java
  • Hibernate中ManyToMany的第三张表添加其他字段

    1、现在有优惠券Coupon表,用户User表和一张希望可以保存用户对优惠券是否使用信息的表

    User.class

    package com.life.hibernate.bean;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    /**
     * @author JL
     * 用户类
     */
    @Entity
    // 实体类配置
    @Table(name="tb_user")
    // 表格配置
    public class User  {
        @Id //在表中的名称
        @GeneratedValue(strategy=GenerationType.AUTO) //自动增长
        private Integer id;
    /** * 一个用户可以用友多个优惠券 但优惠券只有自己的属性,没有用户的引用 单边的一对多关系 */
     @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>(); 
    //get-set方法略  
    }

    Coupon.class

    package com.life.hibernate.bean;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "tb_coupon")
    public class Coupon extends BaseBean {
        @Id //在表中的名称
        @GeneratedValue(strategy=GenerationType.AUTO) //自动增长
        private Integer id;
        /**
         * 优惠券名称
         */
        private String name;
    
        @ManyToMany(mappedBy="coupons")
        private List<User> users=new ArrayList<User>();
        //get/set省略
    }

    2、在第三张表tb_user_coupon加一个字段布尔used

    package com.life.hibernate.bean;
    
    import javax.persistence.Entity;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "tb_user_coupon")
    public class UserCoupon {
        @Id //在表中的名称
        @GeneratedValue(strategy=GenerationType.AUTO) //自动增长
        private Integer id;
        private Boolean used = false;
        @ManyToOne
        @JoinColumn(name = "user_id")
        private User user;
        @ManyToOne
        @JoinColumn(name = "coupon_id")
        private Coupon coupon;
    
    }

    3、注意第三张表的几点配置

    (1)表名要与@JoinTable一致

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

    Done

  • 相关阅读:
    什么是大小端
    mina
    出现jar包找不到的问题解决方案
    InnoDB 静态数据加密的常见问题合集
    mysqldump 数据库备份程序,mysqldump 选项合集
    出现The MySQL server is running with the --secure-file-priv option so it cannot问题的原因
    小睡一会,做了一个梦
    IntelliJ IDEA is a solution that appears after importing a project with a clock icon(idea导入项目之后出现时钟的解决方案)
    IntelliJIDE不显示项目文件夹的问题
    夏天的记忆
  • 原文地址:https://www.cnblogs.com/xingyyy/p/3801560.html
Copyright © 2011-2022 走看看