简体   繁体   English

插入@OneToMany关系对象和未在子表中插入父ID的子对象?

[英]Inserting @OneToMany relation object with child not inserting parent id in child table?

I have two model class Gizmo and GizmoChild. 我有两个模型类Gizmo和GizmoChild。 I am saving a gizmo object with having gizmoChild object. 我通过保存gizmoChild对象来保存gizmo对象。 Gizmo object is saving properly but in the GimoChild table gizmo id is NULL. Gizmo对象正确保存,但在GimoChild表中,gizmo id为NULL。

Gizmo Model: Gizmo模型:

  @Entity
  public class Gizmo {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long Id;
    private String field1;
    private String field2;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "gizmo", fetch = 
    FetchType.LAZY)
    private List<GizmoChild> children;
 }

GizmoChild Model: GizmoChild模型:

@Entity 
public class GizmoChild {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Long Id;
 private String childField1;
 private String childField2;
 @ManyToOne
 private Gizmo gizmo;
}

GimoRepository: Gimo储存库:

@Repository
public interface GizmoRepository extends JpaRepository<Gizmo, Long> {
}

GizmoService: GizmoService:

@Service
public class GizmoService {

@Autowired
 private GizmoRepository gizmoRepository;

 public void save(Gizmo gizmo){
    gizmoRepository.save(gizmo);
}

Controller: 控制器:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveGizmo(Model model){
    Gizmo gizmo1 = new Gizmo();
    gizmo1.setField1("Field1");
    gizmo1.setField2("Field2");

    GizmoChild gizmoChild = new GizmoChild();
    gizmoChild.setChildField1("ChildField1");
    gizmoChild.setChildField2("ChildField2");

    gizmo1.getChildren().add(gizmoChild);

    gizmoService.save(gizmo1);
    return "redirect:/";
}

I am creating a Gizmo object than i'm creating GizmoChild and adding them on list. 我创建的是Gizmo对象,而不是创建的GizmoChild,并将它们添加到列表中。 Gizmo is saving but GizmoChild table gizmo id is not inserting. Gizmo正在保存,但未插入GizmoChild表gizmo ID。 How to get rid of this problem? 如何摆脱这个问题?

Firstly you can add GizmoChildRepository too, cause of Gizmo and GizmoChild are different entity object of yours: 首先您也可以添加GizmoChildRepository,Gizmo和GizmoChild的原因是您的不同实体对象:

@Repository
public interface GizmoChildRepository extends JpaRepository<GizmoChild, Long> {
}

Then changing service method save(Gizmo gizmo) for persisting GizmoChild data too. 然后更改服务方法save(Gizmo gizmo)来持久保存GizmoChild数据。

GizmoService: GizmoService:

@Service
public class GizmoService {

@Autowired
private GizmoRepository gizmoRepository;

@Autowired
private GizmoChildRepository gizmoChildRepository;

public void save(Gizmo gizmo) {
   for(GizmoChild child : gizmo.getChildren()) {
       gizmoChildRepository.save(child);
   }
   gizmoRepository.save(gizmo);
}

You can try this: 您可以尝试以下方法:

@OneToMany(cascade=CascadeType.ALL, mappedBy="gizmo")
private Set<GizmoChild> workOrders;

@ManyToOne(optional=false)
@JoinColumn(name="gizmo_id", referencedColumnName="id")
private Gizmo gizmo;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM