JPA中的ManyToMany关系可能与索引有关吗?

时间:2017-09-03 18:48:55

标签: java mysql hibernate jpa spring-data

我想在实体之间建立多对多的关系,而我现在在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);

1 个答案:

答案 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 = ?;