Вставить объект отношения @OneToMany с дочерним элементом, не вставляя родительский идентификатор в дочернюю таблицу? - PullRequest
1 голос
/ 03 мая 2019

У меня есть две модели классов Gizmo и GizmoChild. Я сохраняю объект gizmo с объектом gizmoChild. Объект Gizmo сохраняется правильно, но в таблице GimoChild идентификатор Gizmo имеет значение NULL.

Гизмо Модель:

  @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 Модель:

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

GimoRepository:

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

GizmoService:

@Service
public class GizmoService {

@Autowired
 private GizmoRepository gizmoRepository;

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

Контроллер:

@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:/";
}

Я создаю объект Gizmo, а не GizmoChild и добавляю их в список. Gizmo сохраняет, но идентификатор gizmo таблицы GizmoChild не вставляется. Как избавиться от этой проблемы?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Вы можете попробовать это:

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

@ManyToOne(optional=false)
@JoinColumn(name="gizmo_id", referencedColumnName="id")
private Gizmo gizmo;
0 голосов
/ 03 мая 2019

Во-первых, вы также можете добавить GizmoChildRepository, потому что Gizmo и GizmoChild - это разные ваши объекты сущностей:

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

Затем измените метод обслуживания save(Gizmo gizmo) для сохранения данных GizmoChild.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...