我有两个实体Product和Tag。它们之间的关系是ManyToMany,因此一个产品可以有多个tag,一个tag可以分配给多个产品。应用程序的工作方式是先创建Product和Tag,然后通过PutMapping分配。
因此,我的问题是如何将Product分配到Tag Entity中的产品列表?
实体:
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String productName;
@ManyToMany
private List<Tag> tag;
}
public class Tag{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String tagName;
@ManyToMany
private List<Product> product;
}
以及将Product分配给List in Tag并更新它的方法,但这不起作用。首先,我试图找到现有的Tag和Product,然后将Product设置为List in Tag实体。
public Tag update(Long productID, Long tagID, Tag tag){
Tag udpatedTag = tagRepository.findById(tagID).get();
Product product = productRepository.findById(productID).get();
updatedTag.setProduct((List <Product>) product);
tagRepository.save(updatedTag)
return updatedTag;
}
3条答案
按热度按时间cuxqih211#
您希望将产品添加到列表中,而不是将
Product
转换为List
。另外,请考虑将Tag
中的product
变量重命名为products
,因为它是Product
的Collection
。此外,您应该考虑将Set
用于ManyToMany
Map。在互联网上挖掘一下,了解List
与Set
在OneToMany
和ManyToMany
Map方面的差异。vohkndzv2#
如果要使用多对多结构,则需要创建单独的表。
例如:enter image description here
您可以查看此站点-〉https://www.bezkoder.com/jpa-many-to-many/
1aaf6o9v3#
正如Iane.麦克斯韦所建议的那样,如果创建一个单独的表,效果会更好,如下所示:
产品1---M产品_标签M----1标签
这样您就可以控制该表。但是如果您想使用@ManyToMany注解,请不要忘记在注解中使用mappedBy,否则它将创建两个表,即product_tag和tag_product。
我按照莱恩·麦克斯韦的建议做了我得到的结果是这样的: