jpa 第一个实体的PK没有在第二个引用列中更新-->休眠Sping Boot

wr98u20j  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(60)

正如标题所说,我有两个实体类
实体-1

@Entity
@Table(name = "entity1", schema = "schema")
public class EntityOne {
   
   @Id
   @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "first_id_seq")
   @SequenceGenerator(sequenceName = "[schema].[first_id_seq]", name = "first_id_seq", allocationSize = 1)
   
   @Column(name = "id")
   private Integer id;
   
   private String name;
   
   @OneToMany(mappedBy = "entityOne", cascade=CascadeType.ALL)
   private List<EntityTwo> entityTwo;
}

实体-2

@Entity
@Table(name = "entity2", schema = "schema")
public class EntityTwo {
   
   @Id
   @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "second_id_seq")
   @SequenceGenerator(sequenceName = "[schema].[second_id_seq]", name = "second_id_seq", allocationSize = 1)
   @Column(name = "id")
   private Integer id;
   
   @Column(name = "vendor_id")
   private Integer vendorId;

   private String name;
   
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "vendor_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
   private EntityOne entityOne;
}

最后,当保存它时,我用这样的方法创建了DAO层

@Repository
public interface Repository extends JpaRepository<EntityOne, Integer> {
}

public class DAO {
    
    @Autowired
    private Repository repository;

//consider this method getting called from controller
        public EnitityOne mapRequestToEntity(Request request) {
         EntityOne entityOne = new EntityOne();
         entityOne.setName(request.getName);
         List<EntityTwo> entityTwo = new ArrayList<>();
         // setting entityTwo values here from the request
         entityOne.setEntityTwo(entityTwo);
         entityOne = save(entityOne);
         return entityOne;
}
    
    public EntityOne save(EntityOne entityOne) {
        repository.saveAndFlush(entityOne);
    }
}

我正在从控制器中保存EnityOne,但在保存EnityOne时,其ID(PK)应Map到EnityTwo的vendor_id和保存,但这并未发生。它保存为NULL(仅在POC时,db中接受null)

xe55xuns

xe55xuns1#

根据您的代码,您没有直接关联到具有一个字段(使用@OneToMany是不够的)的PaddyOne和PaddyTwo。尝试保存EntityOne,然后保存EntityTwo,并为其分配EntityOne字段。应该够了。

相关问题