首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插入一个到多个关系弹簧引导

插入一个到多个关系弹簧引导
EN

Stack Overflow用户
提问于 2020-07-26 09:43:24
回答 1查看 57关注 0票数 0

我有一个页面来获取所有字段及其关系数据。

我想要实现的是插入包,然后插入它的相关内容。

我该怎么做?如果有什么遗漏,请评论一下,我必须补充一下。

显示形式控制器

代码语言:javascript
运行
复制
@GetMapping("/add-tour-package")
public String showAddPackageForm(Model model) {
    TourPackage tourPackage = new TourPackage();
    Itinerary itinerary = new Itinerary();
    model.addAttribute("tourPackage", tourPackage);
    model.addAttribute("itinerary", itinerary);
    return "new-tour-package";
}

插入旅游套餐

代码语言:javascript
运行
复制
@PostMapping("/save-tour-package")
public String saveTourPackage(@ModelAttribute("tourPackage") TourPackage tourPackage, @ModelAttribute("itinerary") Itinerary itinerary) {
    // save package to database
    tourPackageService.saveTourPackage(tourPackage);
    return "redirect:/";
}

具有动态字段的表单。请注意,行程是动态输入字段,因此将有多个行程。

代码语言:javascript
运行
复制
<form th:action="@{/save-tour-package}" th:object="${tourPackage}" method="POST">
        <div class="form-group">
            <div class="form-group">
                <label for="title">Title</label>
                <input type="text" class="form-control" id="title" th:field="*{title}" placeholder="Title">
            </div>
            <div class="form-group">
                <label for="description">Description</label>
                <textarea class="form-control" id="description" th:field="*{description}"
                          placeholder="Description"></textarea>
            </div>
            <div class="row">
                <div class="col-3">
                    <div class="form-group">
                        <label for="geography">Geography</label>
                        <input type="text" class="form-control" id="geography" th:field="*{geography}"
                               placeholder="Geography">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="location">Location</label>
                        <input type="text" class="form-control" id="location" th:field="*{location}"
                               placeholder="Location">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="difficulty">Difficulty</label>
                        <input type="text" class="form-control" id="difficulty" th:field="*{difficulty}"
                               placeholder="Difficulty">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="altitude">Altitude</label>
                        <input type="text" class="form-control" id="altitude" th:field="*{altitude}"
                               placeholder="Altitude">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="religion">Religion</label>
                        <input type="text" class="form-control" id="religion" th:field="*{religion}"
                               placeholder="Title">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="ethnic_people">Ethnic People</label>
                        <input type="text" class="form-control" id="ethnic_people" th:field="*{ethnic_people}"
                               placeholder="Ethnic People">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="accommodation">Accommodation</label>
                        <input type="text" class="form-control" id="accommodation" th:field="*{accommodation}"
                               placeholder="Title">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="transportation">Transportation</label>
                        <input type="text" class="form-control" id="transportation" th:field="*{transportation}"
                               placeholder="Transportation">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="minimum_pax">Minimum Pax</label>
                        <input type="text" class="form-control" id="minimum_pax" th:field="*{minimum_pax}"
                               placeholder="Minimum Pax">
                    </div>
                </div>
                <div class="col-3">
                    <div class="form-group">
                        <label for="price">Price</label>
                        <input type="text" class="form-control" id="price" th:field="*{price}" placeholder="Price">
                    </div>
                </div>
            </div>

            <div class="row append-new-field">
                <div class="col-2">Day</div>
                <div class="col-3">Title</div>
                <div class="col-3">Description</div>
                <div class="col-3">Altitude</div>
                <div class="col-1"></div>
            </div>
            <div class="row delete-field">
                <div class="col-2">
                    <input type="text" class="form-control" th:name="${itinerary.day}">
                </div>
                <div class="col-3">
                    <input type="text" class="form-control" th:name="${itinerary.title}">
                </div>
                <div class="col-3">
                    <input type="text" class="form-control" th:name="${itinerary.description}">
                </div>
                <div class="col-3">
                    <input type="text" class="form-control" th:name="${itinerary.altitude}">
                </div>
                <div class="col-1">
                    <a href="javascript:;" class="text-danger delete-row"><i class="fas fa-minus-circle"></i></a>
                </div>
            </div>

            <a href="javascript:;" onclick="addItineraryFields()" class="text-success">Add Fields</a>
            <div class="form-group">
                <button type="submit" class="btn btn-info col-2"> Save Tour Package</button>
            </div>

        </div>
    </form>

行程模型

代码语言:javascript
运行
复制
package com.pristine.travels.model;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;
import java.util.Objects;

@Entity
@Table(name = "itinerary")
@EntityListeners(AuditingEntityListener.class)
public class Itinerary {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private long id;
    private String day;
    private String title;
    private String description;
    private String altitude;
    private String duration;
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date added_date;
    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date update_date;

    @ManyToOne
    @JoinColumn(name="packages_id")
    private TourPackage packages;

    public Itinerary() {
    }

    public Itinerary(long id, String day, String title, String description, String altitude, String duration, Date added_date, Date update_date, TourPackage packages) {
        this.id = id;
        this.day = day;
        this.title = title;
        this.description = description;
        this.altitude = altitude;
        this.duration = duration;
        this.added_date = added_date;
        this.update_date = update_date;
        this.packages = packages;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getAltitude() {
        return altitude;
    }

    public void setAltitude(String altitude) {
        this.altitude = altitude;
    }

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }

    public Date getAdded_date() {
        return added_date;
    }

    public void setAdded_date(Date added_date) {
        this.added_date = added_date;
    }

    public Date getUpdate_date() {
        return update_date;
    }

    public void setUpdate_date(Date update_date) {
        this.update_date = update_date;
    }

    public TourPackage getPackages() {
        return packages;
    }

    public void setPackages(TourPackage packages) {
        this.packages = packages;
    }

    @Override
    public String toString() {
        return "Itinerary{" +
                "id=" + id +
                ", day='" + day + '\'' +
                ", title='" + title + '\'' +
                ", description='" + description + '\'' +
                ", altitude='" + altitude + '\'' +
                ", duration='" + duration + '\'' +
                ", added_date=" + added_date +
                ", update_date=" + update_date +
                ", packages=" + packages +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Itinerary itinerary = (Itinerary) o;
        return id == itinerary.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

旅游套餐模型

代码语言:javascript
运行
复制
package com.pristine.travels.model;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;
import java.util.Objects;
import java.util.Set;

@Entity
@Table(name = "tour_package")
@EntityListeners(AuditingEntityListener.class)
public class TourPackage {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private long id;
    private String title;
    private String description;
    private String geography;
    private String location;
    private String difficulty;
    private String altitude;
    private String religion;
    private String ethnic_people;
    private String accommodation;
    private String transportation;
    private String minimum_pax;
    private Integer price;
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date added_date;
    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date update_date;

    @OneToMany(mappedBy = "packages")
    private Set<Itinerary> itineraries;

    public TourPackage() {
    }

    public TourPackage(long id, String title, String description, String geography, String location, String difficulty, String altitude, String religion, String ethnic_people, String accommodation, String transportation, String minimum_pax, Integer price, Date added_date, Date update_date, Set<Itinerary> itineraries) {
        this.id = id;
        this.title = title;
        this.description = description;
        this.geography = geography;
        this.location = location;
        this.difficulty = difficulty;
        this.altitude = altitude;
        this.religion = religion;
        this.ethnic_people = ethnic_people;
        this.accommodation = accommodation;
        this.transportation = transportation;
        this.minimum_pax = minimum_pax;
        this.price = price;
        this.added_date = added_date;
        this.update_date = update_date;
        this.itineraries = itineraries;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getGeography() {
        return geography;
    }

    public void setGeography(String geography) {
        this.geography = geography;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getDifficulty() {
        return difficulty;
    }

    public void setDifficulty(String difficulty) {
        this.difficulty = difficulty;
    }

    public String getAltitude() {
        return altitude;
    }

    public void setAltitude(String altitude) {
        this.altitude = altitude;
    }

    public String getReligion() {
        return religion;
    }

    public void setReligion(String religion) {
        this.religion = religion;
    }

    public String getEthnic_people() {
        return ethnic_people;
    }

    public void setEthnic_people(String ethnic_people) {
        this.ethnic_people = ethnic_people;
    }

    public String getAccommodation() {
        return accommodation;
    }

    public void setAccommodation(String accommodation) {
        this.accommodation = accommodation;
    }

    public String getTransportation() {
        return transportation;
    }

    public void setTransportation(String transportation) {
        this.transportation = transportation;
    }

    public String getMinimum_pax() {
        return minimum_pax;
    }

    public void setMinimum_pax(String minimum_pax) {
        this.minimum_pax = minimum_pax;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Date getAdded_date() {
        return added_date;
    }

    public void setAdded_date(Date added_date) {
        this.added_date = added_date;
    }

    public Date getUpdate_date() {
        return update_date;
    }

    public void setUpdate_date(Date update_date) {
        this.update_date = update_date;
    }

    public Set<Itinerary> getItineraries() {
        return itineraries;
    }

    public void setItineraries(Set<Itinerary> itineraries) {
        this.itineraries = itineraries;
    }

    @Override
    public String toString() {
        return "TourPackage{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", description=" + description +
                ", geography='" + geography + '\'' +
                ", location='" + location + '\'' +
                ", difficulty='" + difficulty + '\'' +
                ", altitude='" + altitude + '\'' +
                ", religion='" + religion + '\'' +
                ", ethnic_people='" + ethnic_people + '\'' +
                ", accommodation='" + accommodation + '\'' +
                ", transportation='" + transportation + '\'' +
                ", minimum_pax='" + minimum_pax + '\'' +
                ", price=" + price +
                ", added_date=" + added_date +
                ", update_date=" + update_date +
                ", itineraries=" + itineraries +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TourPackage that = (TourPackage) o;
        return id == that.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

更新

TourPackage保存函数

代码语言:javascript
运行
复制
@Override
public long saveTourPackage(TourPackage tourPackage) {
    this.tourPackagesRepo.save(tourPackage);
    return 0;
}

行程节省功能

代码语言:javascript
运行
复制
@Override
public long saveItinerary(Itinerary itinerary) {
    this.itineraryRepo.save(itinerary);
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-26 10:29:41

在做tourPackageService.saveTourPackage(tourPackage);之前,只需为tourPackage:tourPackage.setItineraries(itinerary);设置行程。确保您对日程安排(在tourPackage.setItineraries(itinerary);之前)做了相同的操作:

itinerary.forEach(项目-> { item.setTourPackage(tourPackage);}

那就做tourPackageService.saveTourPackage(tourPackage);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63098493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档