Java Hibernate-将两个实体分组
我有以下代码:Java Hibernate-将两个实体分组,java,hibernate,Java,Hibernate,我有以下代码: Map<OrderProduct, Product> temp = session.createQuery("FROM OrderProduct " + "WHERE orderId = '" + orderId + "'", OrderProduct.class) .getResultList() .stream() .collect(Collectors.toMap(
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()));
但我不知道如何在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
}
下面是db外观的一个简短示例:
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
}
希望这对您有所帮助。:) 你能提供实体类吗?“产品和订单产品之间有什么关系?”AnishB。我更新了我的问题。这个关系
OrderProduct.productId
是Product.id
的外键,但是这个关系是在mysql中声明的。是多对一还是一对一?我不熟悉这些术语。一个订单产品
只能有一个产品
。但是一个产品
可以有多个订单产品
。那么你就有了一对多的关系。真的谢谢。简短的问题mappedBy
为什么服务?那么,在我的例子中:mappedBy=“product”?是的!!不小心写了别的东西。我已经更新了。你必须提到实体的名称(类名)。
@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());