首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何发送包含模型及其子对象的对象

如何发送包含模型及其子对象的对象
EN

Stack Overflow用户
提问于 2020-07-13 20:59:25
回答 2查看 31关注 0票数 0

我想添加新的产品对象及其类别。已成功发送产品对象,但其类别(产品内部)为空。类别无法发送的错误是什么。我怎么才能修复它?@Controller中的代码。

代码语言:javascript
复制
@GetMapping("/loadForm")
public String addNewProduct(Model model){
    Product theProduct = new Product();
    List<Category> categories = (List<Category>) categoryService.findAll();
    model.addAttribute("categories", categories);
    model.addAttribute("product", theProduct);
    return "addProduct";
}
@PostMapping(value="/add")
public String addProduct(@ModelAttribute("product") Product product) {
    System.out.println("Checking");
    productService.insert(product);
    return "product";
}

HTML文件中的代码是

代码语言:javascript
复制
<form th:action="@{/products/add}" th:object="${product}" method="POST">

    <input type="hidden" value="100" th:field="*{productId}"/><br>

        <input type="text" th:field="*{barcode}"
           class="form-control mb-4 col-10" placeholder="barcode"><br><br>

    <input type="text" th:field="*{createdUser}"
           class="form-control mb-4 col-10" placeholder="created User"><br><br>

    <input type="text" th:field="*{lastModifiedUser}"
           class="form-control mb-4 col-10" placeholder="last Modified User"><br><br>

    <input type="text" th:field="*{productIsService}"
           class="form-control mb-4 col-10" placeholder="product Is Service"><br><br>

    <input type="text" th:field="*{productName}"
           class="form-control mb-4 col-10" placeholder="product name"><br><br>

    <input type="text" th:field="*{productbuyingPrice}"
           class="form-control mb-4 col-10" placeholder="product buying Price"><br><br>

    <input type="text" th:field="*{productsellingPrice}"
           class="form-control mb-4 col-10" placeholder="product selling Price"><br><br>

    <input type="text" th:field="*{version}"
           class="form-control mb-4 col-10" placeholder="version"><br><br>

    <select th:field="*{category}"
            class="form-control mb-4 col-10" placeholder="Select category">
        <option th:each="tempCategory : ${categories}" th:value="${tempCategory}" th:text="${tempCategory.categoryName}"></option>
    </select>

    <button type="submit" class="btn btn-info col-4">Save</button>

</form>

产品和类别之间的关系是多对一的。Product类中的代码

代码语言:javascript
复制
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE,
            CascadeType.PERSIST,CascadeType.REFRESH})
    @JoinColumn(name="category_id")
    private Category category;

类别类中的代码

代码语言:javascript
复制
@JsonIgnore
    @OneToMany(mappedBy="category")
    private List<Stock> stocks;
EN

回答 2

Stack Overflow用户

发布于 2020-07-13 21:14:14

在您的场景中,对于一个产品,将有多个类别。映射应为oneToMany

在Product类中:

代码语言:javascript
复制
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="category_id") 
Set<Category> categories;

在类别类中:

代码语言:javascript
复制
@JoinColumn(name = "category_id")
@ManyToOne(cascade = CascadeType.ALL)
private Product product;
票数 0
EN

Stack Overflow用户

发布于 2020-07-13 22:22:14

我只需将cascadefetch添加到类别id中。我替换这个:

代码语言:javascript
复制
@JsonIgnore
    @OneToMany(mappedBy="category")
    private List<Stock> stocks;

有了这个:

代码语言:javascript
复制
@OneToMany(fetch = FetchType.LAZY,
            mappedBy="category",
            cascade = {CascadeType.DETACH, CascadeType.MERGE,
                    CascadeType.PERSIST, CascadeType.REFRESH})
    public List<Product> products;

子实体中缺少级联。

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

https://stackoverflow.com/questions/62876379

复制
相关文章

相似问题

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