java如何创建本机查询以使用@query注释连接相关表
我正在尝试使用@Query注释和本机查询从数据库中获取信息,我打算在我的web shop应用程序的一个页面上使用该数据库。我试图寻找一个类似的问题,但没有运气,所以这里来。。。 以下是相关数据模型的一部分:
产品类别:
@Entity
@Table(name = "products")
public class Products {
public enum EProductType {
FW_FISH, SW_FISH, P_FISH, CRAB_FISH, FW_PLANT, P_PLANT, TANK, FILTER, CO2, FOOD
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "the_type")
@Enumerated(EnumType.STRING)
private EProductType productType;
@OneToMany(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH }, mappedBy = "product")
private List<Stock> stock;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH })
@JoinTable(name = "products_order", joinColumns = @JoinColumn(name = "id"), inverseJoinColumns = @JoinColumn(name = "product_id"))
private List<Orders> orders;
股票类别:
@Entity
@Table(name = "stock")
public class Stock {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "price")
private double price;
@Column(name = "quantity")
private int quantity;
@Column(name = "price_date")
private Date priceDate;
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
@JoinColumn(name = "product_id")
private Products product;
订单类别:
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "date_time")
private LocalDateTime date;
@Column(name = "total_price")
private double totalPrice;
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
@JoinColumn(name = "user_id")
private Users user;
@ManyToMany
@JoinTable(name = "products_order", joinColumns = @JoinColumn(name = "id"), inverseJoinColumns = @JoinColumn(name = "order_id"))
private List<Products> products;
以下是存储库(按照评论中的要求):
库存存储库:
public interface IStockRepository extends CrudRepository<Stock, Integer> {}
产品存储库:
public interface IProductsRepository extends CrudRepository<Products, Integer> {
@Query(value = "SELECT title, the_type, price, quantity FROM Products RIGHT OUTER JOIN Stock ON products.id=stock.product_id", nativeQuery = true)
List<Products> getProductsInfoForTheHomePage();
}
我在html页面上需要的信息是:products表中的标题以及stock表中的价格和数量。 我正在我的存储库界面中尝试此查询:
@Query(value = "SELECT title, the_type, price, quantity FROM Products RIGHT OUTER JOIN Stock ON products.id=stock.product_id", nativeQuery = true)
List<Products> getProductsInfoForTheHomePage();
。。。但当我尝试调用控制器类a中的方法时,会出现以下异常: JAVAsql。SQLException:找不到列“id”。 这是Hibernate记录器显示的内容:
Hibernate: SELECT title, the_type, price, quantity FROM Products RIGHT OUTER JOIN Stock ON products.id=stock.product_id
由于列存在于数据模型中,我猜问题出在查询中。。。 请原谅我的英语不好,希望有人能帮我解决,因为我在这个问题上被困了一段时间
共 (0) 个答案