Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA:implicity persist@manytone实体_Jpa_Persist - Fatal编程技术网

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)
是否可以以一种方式对这些实体进行注释,即我可以持久化一个表a实体,并且该过程将使用新生成的表a主键a_id的值隐式持久化所有表B实体

提前谢谢

这是我的基本情况。但我得到以下例外。看起来表_B在表_A之前被持久化,因此不存在A_id值

@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")