假设我有两个实体 A 和 B 。
A拥有B,并且在创建A时,还必须创建B。 当删除A时,关联的B也应删除。 (因此,我将级联划分为A类而不是B类) 但是出于某些原因,我将外键 aId 放在了表 B 中。
它应该看起来像:
B拥有外键列,但我的域A应该是所有者。
这是我的暂定代码
@Entity
public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(cascade = CascadeType.ALL)
private B b;
...
}
@Entity
public class B{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(mappedBy = "b", fetch = FetchType.LAZY)
@JoinColumn(name = "aId")
private A a;
}
结果:
当我通过Spring JPA存储库保存A时,它会抛出类似情况
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:
NULL not allowed for column "AID"; SQL statement:
insert into B(id, aId, ...) values (null, ?, ...)
似乎没有先保存实例A及其ID,然后将B保存到创建的A ,结果打破了援助的非零约束。
如何正确解决此问题?谢谢。
答案 0 :(得分:0)
您应通过以下方式更正映射:
@Entity
public class A{
...
@OneToOne(mappedBy = "a", cascade = CascadeType.ALL)
private B b;
...
}
@Entity
public class B{
...
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "aId")
private A a;
}
答案 1 :(得分:0)
from distutils.core import setup
setup(
name = 'nester',
version = '1.0.0',
py_modules = ['nester'],
author = 'hfpython',
author_email = 'hfpython@headfirstlabs.com',
url = 'http://www.headfirstlabs.com',
description = 'A simple printer of nested lists',
)