【发布时间】:2018-02-12 02:04:02
【问题描述】:
我想在与实体之间建立多对多关系,我现在在 MySql 端使用联结表。现在我需要一个 JPA 解决方案,比如一个索引,它允许我使用这两个表/实体的 id 作为键/索引,而不需要实体本身,以避免一些跨包引用。查询时我有 EntityA 的 ID 并想用它找到 EntityB 的 ID,仅此而已。这就是我认为它可能工作的方式: (这不是因为我没有 JunctionEntity 的 ID,如果我使用 ID,那么当唯一唯一的东西应该是两个条目在一起时,显然条目必须是唯一的。PK 类也不起作用,因为它会仍然需要对两个实体的上述引用)
实体A:
@Entity
@Table(name = "EntityA")
})
public class EntityA {
@Id
private int id;
}
实体B:
@Entity
@Table(name = "EntityB")
})
public class EntityB {
@Id
private int id;
}
JunctionEntity:
@Entity
@Table(name = "junction", indexes = {
@Index(name = "ix_a_b", columnList = "a_id, b_id")
})
public class JunctionEntity {
private int a_id;
private int b_id;
}
用于连接表的 MySQL:
CREATE TABLE junction (
a_id INT NOT NULL,
b_id INT NOT NULL,
CONSTRAINT junction_fk_a FOREIGN KEY (a_id) REFERENCES entityA (id),
CONSTRAINT junction_fk_b FOREIGN KEY (b_id) REFERENCES entityB (id)
);
CREATE UNIQUE INDEX ix_a_b
ON junction (a_id, b_id);
【问题讨论】:
-
为什么要映射连接表?你想达到什么目的? 我有EntityA的ID,想用它找到EntityB的ID:什么意思?这是一个很多*到**很多。因此,许多 B 与给定的 A 相关联。但无论如何,可以使用简单的 JPQL 查询来查找与给定 A ID 关联的所有 B ID。
-
这里少了一个“s”,令人困惑。我猜一个带有“填充 id”的 JPQL 查询,正如 Abhilekh 建议的那样:)
标签: java mysql hibernate jpa spring-data