家伙!
我有@OneToOne
或@OneToMany
个问题
有一张production
表,还有一张price_list
表
production
表格中的生产价格在price_list
表格中
但price_list
有一个产品的历史价格和当前价格,这意味着生产可以映射许多price_list
记录。当前价格按字段status
标记,等于1。
我的问题是如何使用@OneToOne
或@OneToMany
快速查找当前价格
谢谢!
答案 0 :(得分:0)
有几种方法可以做到
您可以在数据库中创建一个视图(例如current_price
),该视图仅包含price_list
个status = 1
个记录。在您的实体中,您可以将其映射为单独的实体。
与上述类似,如果您的price_list
有一个不错的ID,您可以将视图作为关系,这样您就可以映射到相同的Price
实体作为单独的关系
如果您不介意使用特定于Hibernate的功能,可以使用@Where
如果仅需要某些特定查询而不是实体的一般行为,您可能只需要查询
select new ProductCurrentPrice(product, price)
from Product product
left join product.priceList price
where product = ... and price.status = ACTIVE
如果产品的价格数量不是很大,您可以简单地获取整个列表并在实体中进行过滤:
class Product {
@OneToMany
List<Price> prices;
Optional<Price> getCurrentPrice() {
prices.stream().filter(p->p.status==ACTIVE).findFirst();
}
}
我相信还有其他办法。
答案 1 :(得分:-1)
使用@OneToMany并传递状态,以便在查看或存储过程中获取查询中的当前价格。