当前位置: 首页 > 知识库问答 >
问题:

在EclipseLink提供的JPA中向多对多关系中添加行/从多对多关系中删除行

施学
2023-03-14

复制和粘贴我前面问题的一些介绍部分。

我在Eclipselink2.3.2中使用JPA2.0,在其中,我在产品和它们的颜色之间建立了多对多的关系。一个产品可以有多种颜色,一种颜色可以与多种产品相关联。这种关系在数据库中由三个表表示。

    null
public void addToProduct(Product product) {
    this.getProductSet().add(product);
    product.getColourSet().add(this);
}

public void removeFromProduct(Product product) {
    this.getProductSet().remove(product);
    product.getColourSet().remove(this);
}
@Override
@SuppressWarnings("unchecked")
public void insert(List<Colour> colours, Product product) {
    for (Colour colour : colours) {
        colour.addToProduct(product);
    }
}

@Override
@SuppressWarnings("unchecked")
public void delete(Colour colour, Product product) {
    colour.removeFromProduct(product);
}
public class Product implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "prod_id")
    private Long prodId;

    private static final long serialVersionUID = 1L;

    @JoinTable(name = "prod_colour", joinColumns = {
        @JoinColumn(name = "prod_id",
                    referencedColumnName = "prod_id")},
                    inverseJoinColumns = {
                        @JoinColumn(name = "colour_id", referencedColumnName = "colour_id")})
    @ManyToMany(fetch = FetchType.LAZY)
    private Set<Colour> colourSet;

    //Getters and Setters.
}

colour实体类。

public class Colour implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "colour_id")
    private Long colourId;

    private static final long serialVersionUID = 1L;

    @ManyToMany(mappedBy = "colourSet", fetch = FetchType.LAZY)

    private Set<Product> productSet;

    //Setters and getters.
}

共有1个答案

谭安翔
2023-03-14

为了更新该连接表,您需要例如完全/急切加载的实体,并且在编写代码之后,不要忘记调用

entityManager.merge(colour);
entityManager.merge(product);
 类似资料:
  • 问题内容: 我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。 例如,假设我有以下表格,并且想从中删除一行。我也想从中删除所有相关的行,当然,也删除其中不再需要的任何行。 我知道如何在查询中连接以上表格。但是我看不到如何删除整个关系中的数据。 注意:关系的两端都实现级联删除。因此,例如,从中删除行将删除中的任何相关行。但是显然,这不会传播到表中。 问题答案: 我认

  • 假设我们有两个实体,Entity和Entity。有多个s。节点可以属于多个集群。因此,在

  • 问题内容: 我有一个Firebase数据库。我有公司和承包商。一个承包商可以为多个公司工作,而一个公司可以有多个承包商。这是直接的多对多关系。我希望能够回答有关公司和承包商的问题: 给定一家公司,他们是当前的承包商。 给承包商一个他们要工作的公司。 在Firebase中构造数据的替代方法有哪些? 问题答案: 自我回答确实是对此进行建模的一种方法。它可能是在关系数据库中建模的最直接等效方法: 承办商

  • 问题内容: 我知道在Elasticsearch中,我们可以在文档之间建立子/父关系。 然后,在建立索引时,我可以传递父代ID,以便将子文档和父文档链接起来: 无论如何,在Elasticsearch中建立多对多关系的模型吗? 数据驻留在具有以下架构的MySQL数据库中: 当前这是我的映射(请原谅数组表示法,我在PHP中使用Elastica与我的Elasticsearch服务器通信): 这种方法的问题

  • 我有一个Firebase数据库。我有公司和承包商。一个承包商可以为多个公司工作,一个公司可以有多个承包商。这是一种简单的多对多关系。我希望能够回答有关公司和承包商的问题: 给定一家公司,谁是当前的承包商 给定一个承包商,他们为哪些公司工作 在firebase中构建数据的替代方案是什么?

  • 在我的项目中,我使用Spring数据jpa。我有多对多关系的表格。我的实体: 和零件: 现在在Controller中,我尝试从表部分中删除一行: 但我有例外: 区分完整性约束冲突:“FK9Y4MKICYBLJWPENACP4298I49:PUBLIC.PARTS外键(ID\u导出)引用PUBLIC.EXPORT(ID)(1)”;SQL语句:/*删除com.aleksandr0412.demo.en