Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-将两个实体分组_Java_Hibernate - Fatal编程技术网

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());