Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 想了解hibernate中的@ManyToMany关系吗_Java_Hibernate - Fatal编程技术网

Java 想了解hibernate中的@ManyToMany关系吗

Java 想了解hibernate中的@ManyToMany关系吗,java,hibernate,Java,Hibernate,我有一个实体。 有人能解释我在实体中定义的前任和继任者的关系吗 像 我有多个步骤 步骤1、步骤2、步骤3、步骤4、步骤5 我们只是从它的前身开始的这一步 因此,对于T_数据,步骤表数据如下所示 步骤5的前身是=步骤4,步骤3 步骤4的前身是=步骤3 步骤3的前身是=步骤2 步骤2的前身是=步骤1 步骤1没有前置项 现在我的实体如下所示 @Entity @Table(name = "T_DATA_STEP") public class DataStepEntity implements DBEnt

我有一个实体。
有人能解释我在实体中定义的前任和继任者的关系吗


我有多个步骤
步骤1、步骤2、步骤3、步骤4、步骤5

我们只是从它的前身开始的这一步
因此,对于T_数据,步骤表数据如下所示
步骤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;

}
@实体
@表(name=“T_数据_步骤”)
公共类DataStepEntity实现DBEntity,可序列化{
@身份证
@列(name=“ID”,nullable=false,unique=true)
@GenericGenerator(name=“DATA\u STEP\u ID”,strategy=“native”)
@GeneratedValue(generator=“数据\u步骤\u ID”)
私人长id;
@ManyToMany(targetEntity=DataStepEntity.class,fetch=FetchType.EAGER)
@JoinTable(name=“T_WKF_preducer”,joinColumns=@JoinColumn(name=“DATA\u STEP\u ID”))
@Fetch(FetchMode.SUBSELECT)
@杰索尼奥雷
私人收藏;
@ManyToMany(mappedBy=“preceducer”,fetch=FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
@杰索尼奥雷
私人收藏继承人;
}
所以我的问题是
在hibernate中,当我获得步骤4的DataStepEntity时,它将给我作为步骤3的前置项和作为步骤5的后续项
我想了解接班人的全部情况

它将如何将步骤5绑定为步骤4的后续步骤?

在您的
数据步骤实体中,后续步骤之间存在自反的
@manytomy
关系。将有一个
JoinTable
,其中有两个外键指向
T_DATA_STEP
表(DataStepEntity的表)。一列是
数据步骤实体的Id,另一列是其后续实体的Id

每个
DataStepEntity
在此表中为每个后续实体都有一个条目。例如,如果Step4只有一个后续项Step5,则在“Id”列中将有一个Id为Step4的条目,在“后续项Id”列中将有一个Id为Step5的条目

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

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