想要了解hibernate中的@ManyToMany关系

时间:2015-02-25 14:23:58

标签: java hibernate

我有一个实体 任何人都能解释我在实体中定义的前任和后继的关系吗?

喜欢
我有多个步骤
步骤1,步骤2,步骤3,步骤4,步骤5

我们只是从它的前任中走出来的那一步 所以对于T_DATA_STEP表数据如下 步骤5的前身是=步骤4,步骤3
步骤4的前身是=步骤3
步骤3的前身是=步骤2
步骤2的前身是=步骤1
步骤1没有前任

现在我的实体就像下面的

@Entity
@Table(name = "T_DATA_STEP")
public class DataStepEntity implements DBEntity, Serializable {

    @Id
    @Column(name = "ID", nullable = false, unique = true)
    @GenericGenerator(name = "DATA_STEP_ID", strategy = "native")
    @GeneratedValue(generator = "DATA_STEP_ID")
    private Long id;

    @ManyToMany(targetEntity = DataStepEntity.class, fetch = FetchType.EAGER)
    @JoinTable(name = "T_WKF_PREDECESSOR", joinColumns = @JoinColumn(name = "DATA_STEP_ID"))
    @Fetch(FetchMode.SUBSELECT)
    @JsonIgnore
    private Collection<DataStepEntity> predecessor;

    @ManyToMany(mappedBy="predecessor",fetch = FetchType.EAGER)
    @Fetch(FetchMode.SUBSELECT)
    @JsonIgnore
    private Collection<DataStepEntity> successor;

}

所以我的问题是 当我获得第4步的DataStepEntity时,它会给我前身作为步骤3,后继作为步骤5在hibernate中。
我想了解继任者的整个取得。
如何将步骤5绑定为步骤4的后续步骤?

1 个答案:

答案 0 :(得分:0)

DataStepEntity中,后继者之间存在反身@ManyToMany关系。 JoinTable表({1}}表(DataStepEntity实体的表)有两个外键T_DATA_STEP。一列将是DataStepEntity的Id,另一列是其后继的Id。

每个DataStepEntity将在此表中为每个后继者添加一个条目。例如,如果您的Step4只有一个后继者Step5,则会在ID列中显示Id为Step4的条目,并在后续ID列中显示Step5的ID。

该过程与指向不同实体的@ManyToMany关系相同,但创建的JoinTable中的外键指向同一个表。

对于前一种情况,它与后继者相同。将有另一个JoinTable,其中包含DataStepEntities及其前身的ID。