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