有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建本机查询以使用@query注释连接相关表

我正在尝试使用@Query注释和本机查询从数据库中获取信息,我打算在我的web shop应用程序的一个页面上使用该数据库。我试图寻找一个类似的问题,但没有运气,所以这里来。。。 以下是相关数据模型的一部分:

enter image description here

产品类别:

@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) 个答案