从两个视图中获取相同的对象

Getting same object from two views

我有树模型 'cinema'、'cinemaHall' 和 'seo',其中 'cinema' 与 @OneToMany 与 'cinemaHall' 有关系。此外,'cinema' 和 'cinemaHall' 模型与 @OneToOne 和 'seo' 之间存在关系。问题出在模型 seo 中。在创建 'cinema' 和 'cinemaHall' 之后,我得到了来自 Thymeleaf 的相同 'seo',它与 'cinema' 相关。但是我需要为 'cinemaHall' 接收 'seo'(例如,id = 2)。求大家截图理解。

CinemaController.java:

...
@PutMapping("update/{cinemaId}")
    public String updateCinema(@PathVariable("cinemaId") Long cinemaId,
                               @ModelAttribute("cinema") Cinema cinema,
                               @ModelAttribute("seo") SEO seo){
        cinema.setSeo(seo);
        cinemaService.updateCinema(cinema);
        return "redirect:/admin/cinemas";
    }
...
 @PutMapping("edit/{cinemaId}/halls/update/{hallId}")
    public String updateCinemaHall(@PathVariable("cinemaId") Long cinemaId,
                                   @PathVariable("hallId") Long hallId,
                                   @ModelAttribute("cinemaHall") CinemaHall cinemaHall,
                                   @ModelAttribute("seo") SEO seo){
        cinemaHall.setSeo(seo);
        cinemaHallService.updateCinemaHall(cinemaHall);
        return "redirect:/admin/cinemas/edit/" + cinemaId;
    }
...

Cinema.java

...
@OneToMany
    @JoinColumn(name="cinema_id", referencedColumnName="id")
    private List<CinemaHall> cinemaHallList = new ArrayList<>();
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "seo_id")
    private SEO seo;
...

CinemaHall.java

...
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "seo_id")
    private SEO seo;
...

SEO.java

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "seo")
public class SEO extends MappedEntity {

    @Column
    private String url;
    @Column
    private String title;
    @Column
    private String keywords;
    @Column(name = "seo_description")
    private String seoDescription;

}

例如,在创建 cinema(id=1) 和 seo(id=1) 之后,我正在尝试创建 cinemaHall(id=1),同时也成功创建了 seo(id=2),但是之后应用用于保存 cinemaHall 的操作 我正在接收 id=1 的 seo 和来自 id=2 的类似字段。 Look at seo which has id=1, but should be id=2

实际上你给定的关系不工作possibility.because A 到 B 的关系很好,A 到 C 或 B 到 C 任何一种关系只可能两者都不可能。

A 和 B 都需要与 C 的关系,然后不需要 A 到 B relationship.If B 与 C 有关系,然后 A 可以从相应的 B 对象访问 C 对象。

如果你在 cinema 和 seo 之间以及 cinemaHall 和 seo 之间有一对一的映射,你就不需要 cinema 和 cinemaHall 之间的一对多映射。

只需使用一对一映射,这应该可以解决您的问题。