您好我正在学习使用JPA的@ManyToMany关系映射。 我或多或少了解它是如何工作的,但我有一个疑问。让我先向您展示这段代码,我会做一些映射:
@Entity
public class EntityE implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eId;
@ManyToMany
@JoinTable(joinColumns =
@JoinColumn(name = "eId"), inverseJoinColumns =
@JoinColumn(name = "fId"))
private Collection<EntityF> entityFs;
//...
}
另见其他实体:
@Entity
public class EntityF implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long fId;
private Collection<EntityE> entityEs;
//...
}
这是我在数据库中得到的:
我的怀疑是:
- 我想创建@ManyToMany关系,其中EntityE是关系的所有者,这种方法是否正确?
- 我希望关系是单向的,因此它应该只创建一个名为EntityB_EntityF的中介表。但由于某种原因,它还创建了第二个名为EntityF_EntityE的表。我不明白为什么会这样?,这是正常的吗?如果不是我该怎么解决它?
答案 0 :(得分:2)
好的,我在做了一些小实验后得到了答案。我认为这是正确的,它现在按照我的说法运作。 我所做的是,为关系添加一个名称,因为出于某种奇怪的原因,如果你没有指定名称,它会创建一个双向关系。
请参阅此代码修复它:
@Entity
public class EntityE implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eId;
@ManyToMany
@JoinTable(name="entitye_entityf",joinColumns =
@JoinColumn(name = "eId"), inverseJoinColumns =
@JoinColumn(name = "fId"))
private Collection<EntityF> entityFs;
这是另一个实体。
@Entity
public class EntityF implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long fId;
@ManyToMany
@JoinTable(name="entitye_entityf",joinColumns =
@JoinColumn(name = "fId"), inverseJoinColumns =
@JoinColumn(name = "eId"))
private Collection<EntityE> entityEs;
从图像中可以看出,设法解决了我的疑虑。我希望这个答案对其他人也有用。