我想在实体之间建立多对多的关系,而我现在在MySql端使用联结表。现在我需要一个像索引这样的JPA解决方案,它允许我将这两个表/实体的id用作没有实体本身的Key / Index来避免一些交叉包引用。查询时我有EntityA的ID,想要用它找到EntityB的ID,仅此而已。这就是我认为它可能会起作用的方式: (这不是因为我没有JunctionEntity的ID,如果我使用ID,那么当唯一独特的Thing应该是两个条目时,显然条目必须是唯一的.PK类不是'因为它仍然需要对两个实体的所述引用而工作
EntityA:
@Entity
@Table(name = "EntityA")
})
public class EntityA {
@Id
private int id;
}
EntityB:
@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 for JunctionTable:
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);
答案 0 :(得分:0)
您可以使用a_id,b_id或两者来添加主键并在联结表中搜索。
CREATE TABLE junction (
id INT NOT NULL,
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)
);
您不需要知道联结表的ID。您可以像这样查询联结:
select b_id from junction where a_id = ?;