码迷,mamicode.com
首页 > 系统相关 > 详细

Hibernate映射关系之多对多

时间:2014-08-11 00:09:50      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   os   io   数据   ar   

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

 

Hibernate映射关系之多对多,布布扣,bubuko.com

Hibernate映射关系之多对多

标签:style   blog   color   java   os   io   数据   ar   

原文地址:http://www.cnblogs.com/xingyyy/p/3903519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!