gpt4 book ai didi

java - JPA。多对多创建重复的行

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:37 25 4
gpt4 key购买 nike

请帮助我了解我错在哪里。我有三个表:

餐 table 愿望

CREATE TABLE WISHES(
wish_id bigint default nextval('wish_id_inc'::regclass),
target text not null,
PRIMARY KEY(wish_id)
)

表格标签

CREATE TABLE TAGS(
tag character varying(255) not null,
PRIMARY KEY(tag)
)

表 Wish_tags

CREATE TABLE wish_tags(
wish_tags bigint default nextval('wish_tags_id_inc'::regclass),
wish_id bigint references wishes(wish_id),
tag_id character varying(255) references tags(tag),
PRIMARY KEY(wish_tags)
)

我为这些表创建了两个类:

@Entity
@Table(name="wishes")
public class Wish implements Serializable{
...
@ManyToMany
@JoinTable(
name="wish_tags",
joinColumns={@JoinColumn(name="wish_id", referencedColumnName="wish_id")},
inverseJoinColumns={@JoinColumn(name="tag_id", referencedColumnName="tag")})
private List<Tag> tags;
...
}
    @Entity
@Table(name="tags")
public class Tag implements Serializable{
...
@ManyToMany(mappedBy="tags")
private List<Wish> whishes;
...
}

当我尝试使用标签创建愿望时,我在 wish_tags 表中得到了副本。

@Transactional
public Wish createWish(List<String> tags){
//em is EntityManager
ArrayList<Tag> ObTags = new ArraList<Tag>();
for(String tagId: tags){
Tag tag = new Tag(tagId);
ObTags.add(em.merge(tag));
}
Wish wish = new Wish(args1,..., ObTags);
em.persist(wish);
}

我做错了什么?为什么创建重复项?请帮帮我。

最佳答案

DB中保存了两个标签,一个保存在EntityManager.merge(tag)上,另一个保存在级联EntityManager.persist(wish)ObTags上 集合。

关于java - JPA。多对多创建重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com