Hibernate创建不需要的映射表 [英] Hibernate Creating Unwanted Mapping Tables

查看:113
本文介绍了Hibernate创建不需要的映射表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个模式。我的模式如下:

$ p $ @Entity
@Table(name =PROMOTION)
public class促销{
@Id
@Column(name =promotion_id)
private String promotionId;

@JoinColumn(name =seller_id)
私人列表< Seller> sellerList;
};

@Entity
@Table(name =SELLER)
公共类卖家{
@Id
@Column(name =seller_id)
私人字符串sellerId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name =promotion_id)
私人促销促销;

@ManyToMany(fetch = FetchType.LAZY)
@JoinColumn(name =seller_id,referencedColumnName =seller_id)
private List< SellerPromotion> sellerList;
};

@Entity
@Table(name =SELLER_PROMOTION)
public class SellerPromotion {
@Id
@Column(name =seller__promotion_id)
private String sellerPromotionId;

@Column(name =seller_id)
private String sellerId;
@Column(name =product_id)
private String productId;
};

问题是当我执行单元测试时我注意到,而不是3,总共4个表格是获得创建。


  1. 促销

  2. 卖家

  3. SELLER_PROMOTION

  4. SELLER_SELLER_PROMOTION

我不确定4。一个正在创建。它是一个正在创建的映射表。即使当我执行show sql时,我也能看到hibernate在实际加入SELLER_PROMOTION之前正在与此表(SELLER_SELLER_PROMOTION)进行连接。



我没有任何线索发生了什么。任何人都可以帮助我理解为什么会发生这种情况,以及如何解决这个问题? 解决方案

您的Seller和SellerPromotion实体之间有
ManyToMany关系。
建立多对多关系的唯一方法是建立连接表。
这就是为什么hibernate会创建一个名为SELLER_SELLER_PROMOTION
的表并且根据你的情况有两列。
每个都是各个表的外键。



如果你真的感兴趣。掌握名为Pro JPA的书。
它在Capter对象关系映射中精美地解释了这些概念。


I am creating a schema. My schema is as follows

@Entity
@Table(name = "PROMOTION")
public class Promotion {
@Id
@Column (name = "promotion_id")
private String promotionId;

@JoinColumn(name = "seller_id")
private List<Seller> sellerList;
};

@Entity
@Table(name = "SELLER")
public class Seller {
@Id
@Column (name = "seller_id")
private String sellerId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "promotion_id")
private Promotion promotion;

@ManyToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "seller_id", referencedColumnName = "seller_id")
private List<SellerPromotion> sellerList;
};

@Entity
@Table(name = "SELLER_PROMOTION")
public class SellerPromotion {
@Id
@Column (name = "seller__promotion_id")
private String sellerPromotionId;

@Column(name = "seller_id")
private String sellerId;
@Column(name = "product_id")
private String productId;
};

Problem is when I am executing the Unit Test I am observing that rather than 3, total 4 tables are getting created.

  1. PROMOTION
  2. SELLER
  3. SELLER_PROMOTION
  4. SELLER_SELLER_PROMOTION

I am not sure how the 4. one is getting created. It is a mapping table which is getting created. Even when I do a show sql, I am able to see that hibernate is making joins with this table (SELLER_SELLER_PROMOTION) before actually joining with SELLER_PROMOTION.

I don't have any clue what is happening. Can anybody please help me understand why it is happening and how to fix this ?

解决方案

The reason why you are getting this is because you have ManyToMany relationship between your Seller and SellerPromotion entities. And only way to model a many to many relation is to have join table. That is why hibernate will create a table with the name SELLER_SELLER_PROMOTION and have two columns as per your case. Each will be foreign key to respective tables.

If you are really interested. Get hold of the book called Pro JPA. It explains these concepts beautifully in capter Object relational mapping.

这篇关于Hibernate创建不需要的映射表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆