休眠-1:N-父级在保存子级时被复制

问题描述 投票:2回答:1

GitHub repo if needed, Maven web project (pom.xml), SQL script under resources directory.

我知道这是我的错,问题是我整天都无法修复它,这很简单,很麻烦,也请忽略关于表名和列的关系,这是一个显示问题的示例项目。


期望:

沿着子项的父关系存储新子项(子项为此列),而无需再次存储父项。


错误:

CascadeType.ALL导致父对象重复,但是尝试删除它以使用其他类型抛出:java.sql.SQLIntegrityConstraintViolationException:列'user_id'不能为空]

Column'user_id'是存储父关系的子表中的列的名称。


我将跳过一些其他注释,因此这不会成为代码墙


用户实体

private Long id;
private String name;

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = {
        CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
private List<Username> usernameList = new ArrayList<>();

用户名实体

private Long id;
private String username;

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;

同样,使用CascadeType.All以外的任何东西都会由于某些原因引发错误


UsernameDAO这是用于存储子级用户名的方法,该方法与父级用户相同]]]

Session session = factory.getCurrentSession();
session.save(username);

UsernameService

usernameDAO.save(username);

GitHub仓库,如果需要,Maven Web项目(pom.xml),资源目录下的SQL脚本。我知道这是我的错,问题是我整天都无法修复,可能是...

java hibernate spring-mvc one-to-many cascade
1个回答
0
投票

我相信您在对象用户名中分配对象用户的方式不正确。如果您正在执行以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.