java多字段匹配实体,JPA将实体的多对多字段值替换为不同的值

在Java中,使用JPA处理多对多关系时遇到一个问题:当尝试更新Artwork实体的主题列表时,新数据被添加到现有列表中而不是替换。要实现列表替换,需要正确处理ArtSubject的保存和关联。在保存Artwork之前,首先创建新的ArtSubject对象,然后设置到Artwork的subject属性。最后,保存更新后的Artwork对象以完成替换操作。
摘要由CSDN通过智能技术生成

我有一个名为 Artwork 的实体,它有一个名为subject的成员,使用另一个实体映射多对多,如下所示 .

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)

private List subjects;

假设在我的 Artwork 表中我有一个主题值为 (ArtSubject1, ArtSubject2, ArtSubject3) 的记录

我必须用 (ArtSubject5, ArtSubject6, ArtSubject7) 替换这个值 .

完全不同的列表 .

Curretly如果我用 (ArtSubject5, ArtSUbject6, ArtSubject7) 保存 Artwork 对象的新数据 .

JPA将其附加到已存在的列表中,结果数据为 (ArtSubject1, ArtSubject2, ArtSubject3, ArtSubject5, ArtSUbject6, ArtSubject7)

我希望它只是 (ArtSubject5, ArtSubject6, ArtSubject7)

请找到我保存ArtSubject并将其设置为Artwork对象的方法 .

ArtWork artwork = new ArtWork();

List subject = new ArrayList<>();

List style = new ArrayList<>();

Artist artist = new Artist();

List artCollections = new ArrayList<>();

// Classifying Collections into each category.

for (Collection collection : collections) {

String tokens[] = collection.getTitle().split("_");

if (tokens == null || tokens.length < 2) {

LOGGER.info("Invalid Collection Type: Collection type {} not recognised",

collection.getTitle());

continue;

}

String collectionType = tokens[0];

switch(collectionType) {

case "subject":

ArtSubject artSubject = new ArtSubject(collection.getId(),

collection.getTitle().split("_")[1]);

subject.add(artSubject);

artSubjectRepository.save(artSubject);

break;

default:

LOGGER.info("Invalid Collection Type: Collection type {} not recognised",

collection.getTitle());

break;

}

}

artwork.setSubject(subject);

在此之后我将艺术品保存为artRepository(CRUD存储库) artRepository.save(artwork) 请帮助我 .

提前致谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值