当前位置: 首页 > 知识库问答 >
问题:

如何使用嵌套属性从thymeleaf、hibernate中的数据库检索表值?

徐唯
2023-03-14

我正在使用Thymeleaf和hibernate创建一个简单的SpringBootWeb应用程序。所以计划从产品实体中显示产品类别,其中每个类别属于多个产品,一个产品只有一个类别。

希望显示所有产品,但有些产品无法使用嵌套属性显示产品类别。

它给出了以下错误

此应用程序没有/error的显式映射,因此您将其视为回退。

Sun 1月31日03:46:01 CET 2021有一个意外错误(type =内部服务器错误,状态=500)。模板解析(模板:“类路径资源[templates/products.html]”)org时出错。百里香。例外情况。TemplateInputException:在组织上的模板解析(模板:“类路径资源[templates/products.html]”)过程中发生错误。百里香。模板分析器。加成AbstractMarkupTemplateParser。org上的parse(AbstractMarkupTemplateParser.java:241)。百里香。模板分析器。加成AbstractMarkupTemplateParser。org上的parseStandalone(AbstractMarkupTemplateParser.java:100)。百里香。发动机模板管理器。org上的parseAndProcess(templatmanager.java:666)。百里香。模板引擎。进程(TemplateEngine.java:1098)位于org。百里香。模板引擎。进程(TemplateEngine.java:1072)位于org。百里香。Spring五号。看法百里香电子海景。renderFragment(ThymeleafView.java:366)位于org。百里香。Spring五号。看法百里香电子海景。在org上渲染(ThymeleafView.java:190)。springframework。网状物servlet。调度员服务。在org上呈现(DispatcherServlet.java:1393)。springframework。网状物servlet。调度员服务。org上的processDispatchResult(DispatcherServlet.java:1138)。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:1077)位于org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:962)位于org。springframework。网状物servlet。FrameworkServlet。org上的processRequest(FrameworkServlet.java:1006)。springframework。网状物servlet。FrameworkServlet。javax上的doGet(FrameworkServlet.java:898)。servlet。http。HttpServlet。服务(HttpServlet.java:626)位于org。springframework。网状物servlet。FrameworkServlet。javax上的服务(FrameworkServlet.java:883)。servlet。http。HttpServlet。服务(HttpServlet.java:733)位于org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。org上的internalDoFilter(ApplicationFilterChain.java:231)。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:166)位于org。阿帕奇。公猫websocket。服务器WsFilter。doFilter(WsFilter.java:53)位于org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。org上的internalDoFilter(ApplicationFilterChain.java:193)。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:166)位于

@Entity
public class Product {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    
    private Integer id;
    @Column(length=128, nullable=false,unique=true)
    private String name;
    private float price;
    
    
    
    @ManyToOne
    @JoinColumn(name = "category_id")
    public Category category ;


    
    public Product() {}

    public Product(Integer id) {
        super();
        this.id = id;
    }

    public Integer getId() {
        return id;
    }



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



    public String getName() {
        return name;
    }



    public void setName(String name) {
        this.name = name;
    }



    public float getPrice() {
        return price;
    }



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



    public Category getCategory() {
        return category;
    }



    public void setCategory(Category category) {
        this.category = category;
    }

}

@Controller
public class ProductController {
    
    @Autowired
    private ProductRepository ProductRepo;
    @Autowired
    private CategoryRepository categoryRepo;
    
    @GetMapping("products/new")

    public String showProductForm(Model model) {
        
    List<Category> listCategories=categoryRepo.findAll();   
    model.addAttribute("product", new Product());   
    model.addAttribute("listCategories", listCategories);   

    return "product_form";      
        
    }

    
    @PostMapping("/products/save")
    public String saveProduct(Product product) {
        
        ProductRepo.save(product);
        return "redirect:/";
        
    }
    
    
    @GetMapping("/products")
    public String listProducts(Model model) {
        
        List <Product> listProducts=ProductRepo.findAll();
        model.addAttribute("listProducts",listProducts);
        
        return "products";
    }
    
    
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>List Categories </title>
<link rel="stylesheet" type="text/css" th:href="@{/webjars/bootstrap/css/bootstrap.min.css}" />
</head>
<body>
<div class="container text-center">
<div><h1> Products List</h1></div>

<div>

    <table class="table table-bordered">
        <thead class="thead-dark">
        <th>ID</th>
        <th>Name</th>
        <th>Price</th>
        <th>Category</th>
        
        </thead>
    
        <tbody>
          <th:block th:each="product : ${listProducts}">
                        <tr>
                            <td>[[${product.id}]]</td>
                            <td>[[${product.name}]]</td>
                            <td>[[${product.price}]]</td>
                        <td>[[${product.category.name}]]</td>
                        //error in displaying product category name 
                
              
            </tr>
        </tbody>
    </table>


</div>



</div>
</body>
</html>

共有1个答案

屈浩波
2023-03-14

错误在这里:

@ManyToOne
@JoinColumn(name = "category_id")
public Category category ;

您可以在产品实体上尝试以下操作:

@ManyToOne(optional=true)
private Category category;

关于类别实体:

@OneToMany(mappedBy="category")
private List<Product> product;
 类似资料:
  • 我有一个名为employee_comp_field的表,其中提供了薪资字段 然后,我有另一个表,其中员工工资数据存储emp_compensation每个字段。正如你所看到的emp_id 10有三套记录,因为他在同一年获得了三次加薪(year_id=101),这可以通过salary_order领域来识别。 我想用最大工资确定所有雇员的名单,我的期望输出如下: emp_id10号得到了三次加薪……所以

  • 我正在尝试使用Angular检索嵌套Firestore数据库中所有用户的数据。数据库看起来如下所示:用户(id)->posts(id)-{description:这是一个图像,image:imageURL}。

  • 我想在Android中使用列表视图显示用户的家庭数据。这是我的GSON: 这是我的FamilyAdapters.java: 这是我的家人。java: 这个是ApiClient.java: 这个是我的ListKeluarga.java活动,将显示家庭列表: 这是我的MainInterface.java: 我已经尝试为Family.java.中的每个变量使用字符串,但它仍然显示了这一点: e/recy

  • 问题内容: 您有任何想法如何从对象中检索全部吗?我需要将 for循环 更改为 流 “同类”代码。 非常感谢任何帮助 问题答案: 您可以与涉及的串联和三元运算符混合使用,例如:

  • 我有三个类具有类层次结构 > < Li > < p > < code > parent class . Java 具有用于此ChildClass1的属性,它还使用来自父类的一些常见属性 < code>ChildClass2扩展ParentClass 具有用于此子类2的属性,它还使用父类中的一些公共属性 所有这些属性都包含在两列表中 现在我不确定如何从Hibernate继承加载它们? 为愚蠢的问题道

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地: