JPA:implicity persist@manytone实体
我的表结构与以下类似:JPA:implicity persist@manytone实体,jpa,persist,Jpa,Persist,我的表结构与以下类似: Table_A( a_id, data, primary key(a_id) ) Table_B( b_id, a_id, data, primary key (b_id), foreign key (a_id) references Table_A(a_id) ) 表a和表B之间存在一对多关系。我的问题是,如果每个表都有一个实体,其中: 实体表A由表B实体列表和 实体表_B不一定需要对表_a的引用(只需要字段B_id、a_id、da
Table_A(
a_id,
data,
primary key(a_id)
)
Table_B(
b_id,
a_id,
data,
primary key (b_id),
foreign key (a_id) references Table_A(a_id)
)
表a和表B之间存在一对多关系。我的问题是,如果每个表都有一个实体,其中:
- 实体表A由表B实体列表和
- 实体表_B不一定需要对表_a的引用(只需要字段B_id、a_id、data)
@Entity
public class Table_A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "a_id")
private Integer id;
@OneToMany (cascade = CascadeType.PERSIST)
@JoinColumn(name="a_id")
private List<Table_B> bList;
private String data;
}
@Entity
public class Table_B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "b_id")
private Integer id;
private String data;
}
@实体
公共类表A{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“a_id”)
私有整数id;
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name=“a_id”)
私人名单;
私有字符串数据;
}
@实体
公共类表{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“b_id”)
私有整数id;
私有字符串数据;
}
错误:“a_id”列中的null值违反not null约束
详细信息:失败行包含(空,测试,16)
是,在OneToMany关联上,级联设置为
持久化
注意,在B实体中不应该有aId。要么使关联双向,并有一个TableA类型的字段,要么使其单向,并且在B中没有任何字段映射到a_id
编辑:AFAIR,您需要告诉Hibernate该列不是空的,否则它会先尝试插入所有内容,然后填充外键:
@OneToMany (cascade = CascadeType.PERSIST)
@JoinColumn(name="a_id", nullable=false)
private List<Table_B> bList;
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name=“a_id”,nullable=false)
私人名单;
而不是
@OneToMany(cascade = CascadeType.PERSIST) @JoinColumn(name="a_id")
谢谢你的及时回复。我尝试了以下方法,但是我在insert时得到了一个异常,表_B.a_id上的NOTNULL约束。也许,我没有正确地遵循您的解决方案。因此,与其询问是否可以这样做,不如显示代码,显示异常的stak跟踪,并询问它为什么抛出此异常?那样就不会像我给你的那样回答了。
@OneToMany(cascade = CascadeType.PERSIST) @JoinColumn(name="a_id")