保存项目后返回值有问题( ArticleList
)一对多关系( ArticleListEntry
)在spring数据jdbc中。首次创建实体时,调用 repository.save(entity)
我的返回实体,包括所有相关项目,都正确地保存在数据库中。但是,返回的值包含 entries
. 原稿上的字段 ArticleList
始终正确填写。
我有以下实体:
@Table("article_list_meta")
@Data
public class ArticleList {
@Id
private final Long id;
@Version
private long version;
@MappedCollection(idColumn = "list_id", keyColumn = "seq")
private List<ArticleListEntry> entries = new ArrayList<>();
@PersistenceConstructor
public ArticleList(Long id, String publication, String name) {
this.id = id;
this.publication = publication;
this.name = name;
}
public ArticleList(String publication, String name) {
this(null, publication, name);
}
// other fields
}
和
@Data
@Table("article_list_entry")
public class ArticleListEntry {
@Column("article_id")
private final long articleId;
}
使用存储库
@Repository
public interface ArticleListRepository extends CrudRepository<ArticleList, Long> {}
我坚持使用
ArticleList entity = repository.findByPublicationAndName(publication, name)
.orElseGet(() -> new ArticleList(publication, name));
entity = mapper.fromDto(entity, list, fieldsToUpdate);
ArticleList persistedEntity = repository.save(entity);
在最初的( version == 0
)保存,以下所有更新都包含所有相关项。请注意 AbstractRelationalEventListener<ArticleList>
为第一次调用接收具有空列表的相同实体 save(articleList)
( persistedEntity
). 这个 entity
仍然包含文章。
这让我相信我偶然发现了一个bug,但由于这是我们第一个使用datajdbc而不是datajpa的项目,所以我的实体中可能也有问题。
我使用的是springboot2.3.6.release和springdatajdbc的2.0.5.release版本。
1条答案
按热度按时间disbfnqx1#
这是一种
entries
不是持久性构造函数的一部分。当使用构造函数创建示例的副本时(例如,因为需要设置id),只有该构造函数中包含的属性被复制。
所以为了解决这个问题,你应该修改
ArticleList
看起来像这样: