双向实体关系使用Spring将id保存为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向实体关系使用Spring将id保存为空相关的知识,希望对你有一定的参考价值。

我正在了解有关使用JpaRepository进行Spring引导的信息,我对此问题感到停滞。我正在尝试保存对象列表,但是它们保存了双向关系中所有对象的id为null,我看到了很多示例,并且一切正常,即使我有另一个项目,其示例相同但实体不同,并且工作正常,希望我已正确表达自己的问题

A类

@Entity
@Table(name="producto")
public class Producto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

    // there are more attributes but i'm hiding It to show less code to  try this more easier to see

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="proveedor_id")
    private Proveedor proveedor;

// getters and setter

// constructor empty and others constructors

另一类

@Entity
@Table(name="proveedores")
public class Proveedor {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name="id")
   private Long id;


   @OneToMany(mappedBy = "proveedor", cascade = CascadeType.ALL)
   private List<Producto> listaProducto =  new ArrayList<Producto>();

// getters and setter

// constructor empty and others constructors

这是测试

   @Test
   void addProveedorConProductos() {
   Proveedor test = new Proveedor();
   List<Producto> lista = new ArrayList<Producto>();
       lista.add(new Producto("bbb","pruebaTest2",123,null,null,null));
       lista.add(new Producto("a","pruebaTest21111",123,null,null,null));
       test = new Proveedor("pruebaTestCase", 12345,lista);
       assertNotNull(proveedor.save(test));

   }

结果

全部保存,但id_proveedor保存为空,这是结果https://imgur.com/a/7JDMvrp的图像>

我正在了解有关使用JpaRepository进行Spring引导的信息,我对此问题感到停滞。我正在尝试保存对象列表,但它们以双向关系中所有对象的id为null进行保存,...

答案

我认为您需要先保存Producto。之后,您可以在数据库中的Producto上调用find,然后可以将Producto添加到Proveedor。希望你能解决这个问题。像这样:

另一答案

我已经按照您的情况实施了项目。您可以参考我的代码,希望您有更多的想法来解决您的问题。

以上是关于双向实体关系使用Spring将id保存为空的主要内容,如果未能解决你的问题,请参考以下文章

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

如何在 Hibernate 3.6 中正确级联保存主键上的一对一双向关系

如何与 Spring Data REST 和 JPA 保持双向关系?

如何使用 Spring Data JPA 保存具有手动分配标识符的实体?

TypeError: eleves.map 不是一个函数 React/Spring-boot 不能显示@ManyToOne 关系

JPA OneToOne,外键在 Spring Boot 上为空