JPA对映射@ManyToMany存在疑问

3

嗨,我正在学习使用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;
    //...
 }

这是我在数据库中得到的信息:

enter image description here

我的疑问是:

- 我想创建一个@ManyToMany关系,其中EntityE是关系的所有者,这种方法正确吗?

- 我希望关系是单向的,因此应该只创建一个中介表EntityB_EntityF。但出于某种原因,它还创建了第二个表EntityF_EntityE。我不明白这是为什么?这正常吗?如果不是,我应该如何解决?

1个回答

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;

从图片中可以看出,我成功解决了我的疑惑。希望这个答案对其他人也有用。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接