JPA如何确定使用@OneToOne或@OneToMany

时间:2017-04-07 01:04:30

标签: java jpa

家伙!
我有@OneToOne@OneToMany个问题 有一张production表,还有一张price_listproduction表格中的生产价格在price_list表格中 但price_list有一个产品的历史价格和当前价格,这意味着生产可以映射许多price_list记录。当前价格按字段status标记,等于1。 我的问题是如何使用@OneToOne@OneToMany快速查找当前价格 谢谢!

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到

  1. 您可以在数据库中创建一个视图(例如current_price),该视图仅包含price_liststatus = 1个记录。在您的实体中,您可以将其映射为单独的实体。

  2. 与上述类似,如果您的price_list有一个不错的ID,您可以将视图作为关系,这样您就可以映射到相同的Price实体作为单独的关系

  3. 如果您不介意使用特定于Hibernate的功能,可以使用@Where

  4. 如果仅需要某些特定查询而不是实体的一般行为,您可能只需要查询

    select new ProductCurrentPrice(product, price) 
    from Product product
    left join product.priceList price
    where product = ... and price.status = ACTIVE
    
  5. 如果产品的价格数量不是很大,您可以简单地获取整个列表并在实体中进行过滤:

    class Product {
        @OneToMany
        List<Price> prices;
    
        Optional<Price> getCurrentPrice() {
            prices.stream().filter(p->p.status==ACTIVE).findFirst();
        }
    }
    
  6. 我相信还有其他办法。

答案 1 :(得分:-1)

使用@OneToMany并传递状态,以便在查看或存储过程中获取查询中的当前价格。