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脚本。我知道这是我的错,问题是我整天都无法修复,可能是...
我相信您在对象用户名中分配对象用户的方式不正确。如果您正在执行以下操作: