ai didi

java - Hibernate - 分组两个实体

转载 作者:行者123 更新时间:2023-11-30 05:33:32 24 4
gpt4 key购买 nike

我有这个代码:

Map<OrderProduct, Product> temp = 

session.createQuery("FROM OrderProduct " +
"WHERE orderId = '" + orderId + "'", OrderProduct.class)
.getResultList()
.stream()
.collect(Collectors.toMap(
k -> k,
v -> session.createQuery("FROM Product " +
"WHERE id = '" + v.getProductId() + "'", Product.class)
.getSingleResult()));

在这里,我获取特定订单 (orderId) 的所有订单产品

创建流并将其收集为 map 后。

在按键上输入订购产品,并针对值进行另一个查询以获取产品(产品信息)。

现在,我对每个订单产品执行 2 次查询。有没有一种方法可以通过一次查询来完成所有这些?

类似这样的:

SELECT * 
FROM order_products OP, products P
WHERE OP.product_id = P.id;

但我不知道如何在 hibernate 中使用。

以下是实体:

@实体

@Table(name = "order_products")
public class OrderProduct{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@Column(name = "order_id")
private Integer orderId;

@Column(name = "product_id")
private Integer productId;

@Column(name = "quantity")
private Integer quantity;

//getters setters

}

@Entity
@Table(name = "products")
public class Product{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
Integer id;

@Column(name = "name")
String name;

//getters setters

}

这是数据库外观的一个简短示例:

OrderProduct:
id-----order_id-----product_id-----quantity
1------1------------1--------------2
2------1------------2--------------1
3------2------------1--------------1

Product:
id-----name
1------productOne
2------productTwo

最佳答案

对于多对一关系:

将您的实体更改为:

@Entity
@Table(name = "products")
public class Product{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
Integer id;

@Column(name = "name")
String name;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "product", cascade = { CascadeType.ALL })
private List<OrderProduct> orderProducts = new ArrayList<OrderProduct>();

//getters setters

}

@Entity
@Table(name = "order_products")
public class OrderProduct{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name = "product_id")
private Product product;

@Column(name = "quantity")
private Integer quantity;

//getters setters

}

现在是代码:

int orderId = 1; // put any id
OrderProduct orderProduct = session.get(OrderProduct.class, orderId);
System.out.println(orderProduct.getProduct().getId());

希望这对您有帮助。 :)

关于java - Hibernate - 分组两个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57078252/

24 4 0
文章推荐: javascript - 对 this 的继承和使用感到困惑
文章推荐: c++ - 使用非常量值初始化的对 const 类成员的引用
文章推荐: C++ boost asio : bind: Address already in use
文章推荐: java - 如何让 ScheduledExecutorService 在预定时间之前运行 Runnable?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com