Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Java Spring数据jpa保存_Java_Spring_Jpa_Spring Data - Fatal编程技术网

Java Spring数据jpa保存

Java Spring数据jpa保存,java,spring,jpa,spring-data,Java,Spring,Jpa,Spring Data,我怎样才能通过考试?在将代码迁移到存储库之前正在工作。保存后,bs存储在数据库中,但对象不会更新。我要做什么才能实现它 鉴于这些类别: @Entity public class A { @Id private String id; @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "aId") private Set<B> bs= new H

我怎样才能通过考试?在将代码迁移到存储库之前正在工作。保存后,bs存储在数据库中,但对象不会更新。我要做什么才能实现它

鉴于这些类别:

@Entity
public class A {
   @Id
   private String id;
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "aId")
   private Set<B> bs= new HashSet<B>();
   ...
}

@Entity
public class B {
   @Id
   @GeneratedValue
   private int id;
   private String aId;
   private String foo;
   ...
}
此测试失败:

    // "a" saved and flushed
    B b = new B();
    b.setAId(a.getId());
    a.getBs().add(b);
    ARepository.save(a);
    assertTrue(b.getId() > 0);

原因可能是B对象尚未处于持久化状态。一旦它将被保存-你不应该得到错误

应该是这样的:

// "a" saved and flushed
B b = new B();
BRepository.save(b)
b.setAId(a.getId());
a.getBs().add(b);
ARepository.save(a);
assertTrue(b.getId() > 0);
另外,你能提供stacktrace吗?这将非常有用。

如果提供的参数是暂时的,则repository.save会持续存在,否则会合并

由于a不是瞬态的,所以执行合并,这意味着没有可以级联到B的持久化操作


在保存a之前,您必须显式保存b或将b添加到新a中,以便正确级联持久化。

在使用session.save之前,我不必单独保存对象以获取Id,没有方法保存b?,没有stackTrace,断言失败。我明白了,我真的重新创建了你的测试,一切正常。我创建的存储库的唯一区别是:公共接口ARepository扩展了Crudepository{}您能提供您的配置吗?
// "a" saved and flushed
B b = new B();
BRepository.save(b)
b.setAId(a.getId());
a.getBs().add(b);
ARepository.save(a);
assertTrue(b.getId() > 0);