首页 > 解决方案 > 通过主键访问另一个表中的列

问题描述

我是java的初学者,正在尝试用spring构建一个简单的API。我找不到任何关于如何在模型文件中实现直观的 pk-fk 关系的清晰描述。该 api 是一个餐厅应用程序,菜单表中的项目必须用于订单和购物车。

我已经在模型文件中编写了所有表定义,例如 Menu、Prices、Orders、ShoppingCart,并且我需要使用 Menu 表中不是 Orders 表中的 pk 的列(例如项目名称)。据我了解,只能使用 pk 设置关系,但是如何通过 pk 从 Orders 表访问 Menu 表中的其他列?

@Entity
public class Menu {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;
    private String name;
    private float size;
    private String ingredients;
    private String dishCat;
    private String drinkCat;
    private Boolean drink;
    private String remarks;
    private String offer;

protected Menu() {

}

public Menu(String name, float size, String ingredients, String dishCat, String drinkCat, Boolean drink, String offer, String remarks) {
    this.name = name;
    this.size = size;
    this.ingredients = ingredients;
    this.dishCat = dishCat;
    this.drinkCat = drinkCat;
    this.drink = drink;
    this.offer = offer;
    this.remarks = remarks;
}


@Override
public String toString() {
    if (drink == false) {
        return String.format("%d. %s: %s - %s. Size: %f g. Ingredients: %s. Category: %s.", id, dishCat, name, offer, size, ingredients, remarks);
    }
    else {
        return String.format("%d. %s: %s - %s. Size: %f ml.", id, drinkCat, name, offer, size);
    }
}
    // Getters and setters, accessor methods
}

标签: javahibernatespring-data-jpa

解决方案


一旦你有了菜单的 ID,你就可以调用你的 DAO 从数据库中检索它。或者,您可以在 Order 中添加一个 transcient 字段,当您检索订单时会自动填写该字段:

@Transcient
 private transcient Menu menu;

无论如何,您的菜单的所有列都应使用@Column 进行注释。


推荐阅读