java - Hibernate 创建不需要的映射表

标签 java hibernate junit hibernate-mapping derby

我正在创建一个架构。我的架构如下

@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;
};

问题是当我执行单元测试时,我观察到创建了总共 4 个表而不是 3 个表。

  1. 促销
  2. 卖家
  3. SELLER_PROMOTION
  4. SELLER_SELLER_PROMOTION

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

我不知道发生了什么。谁能帮我理解为什么会这样以及如何解决这个问题?

最佳答案

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

如果你真的有兴趣。获取名为 Pro JPA 的书。 它在 capter 对象关系映射中很好地解释了这些概念。

关于java - Hibernate 创建不需要的映射表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559731/

相关文章:

java - Android 相机未打开以捕获图像

java - 提取 PDF 时忽略表格

java - 多对多 - 选择没有确定字段且结果数量有限的实体集合

java - Hibernate:删除的对象将通过级联重新保存

unit-testing - 如何对此进行单元测试?

java - 如何从 JUnit 测试中的模拟对象获取 typeName()?

java - 在 Spring Boot 中跳过 VPN DNS 可用性的集成测试

java - 如何将链接列表打印到文件中

java - 在字符串上使用子字符串的替代方法

java - 未创建审核表