伙计!
我有一个@OneToOne
或@OneToMany
的问题。
有一张表production
有一张表price_list
。
一个生产在production
表中有一个在price_list
表中的价格。
但price_list
有一个生产的历史价格和当前价格,这意味着生产可以映射许多price_list
记录。目前的价格是由字段status
标记,其中等于1. 我的问题是如何通过使用@OneToOne
或@OneToMany
快速找到当前价格谢谢!JPA如何确定使用@OneToOne或@OneToMany
回答
有几种方法可以做到
您可以创建在你的数据库,其中只包含
price_list
记录与status = 1
视图(如current_price
)。在你的实体中,你可以将它映射为单独的实体。上面类似,如果你的
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或2)。对于1,它也取决于您正在使用的DBMS。 Oracle应该没问题。不确定其他DBMS –
再次感谢。我会采纳你的建议(3..5)。你在香港吗?你会说中文吗? –
使用@OneToMany并传递状态以获取查询或存储过程中的当前价格。
Thanks.How如何将状态传递给实体?你能给我一个样品吗? –
这会给你一个不完整的实体,我相信Hibernate不会知道它是不完整的,因此随后从第一级缓存中检索实体将永远给你那个不完整的实体 –
@AdrianShum你是对的,将列出所有价格。我提到了查询(即使在你的回答中你也提到了同样的事情)。 –
- 1. JPA实体映射为OneToOne以及OneToMany
- 2. JPA OneToOne和OneToMany:更新和删除
- 3. JPA @OneToMany困境
- 4. JPA关系OneToMany
- 5. JPA - OneToMany persist - EntityExistsException
- 6. JPA Hibernate OneToMany relationship
- 7. JPA CriteriaQuery OneToMany
- 8. JPA 2 - OneToOne交叉引用
- 9. Hibernate | Spring Data JPA | @OneToOne
- 10. Spring JPA休眠OneToOne
- 11. JPA @OneToOne同类型
- 12. 如何正确设置@OneToOne与JPA Hibernate的关系?
- 13. JPA如何避免更新相关的实体@ManyToOne或者@OneToOne
- 14. 如何使用OneToMany?
- 15. JPA:可以对@OneToMany
- 16. JPA OneToMany MappedBy关系
- 17. JPA复合键@OneToMany
- 18. JPA坚持OneToMany ManyToOne
- 19. Spring + JPA @OneToMany with orphanRemoval
- 20. 嵌套@OneToOne - > @OneToMany不填充@OneToMany子对象
- 21. Django中的OneToMany和OneToOne关系冲突
- 22. 如何手动实现JPA关系OneToMany
- 23. JPA如何保存OneToMany对象图
- 24. EclipseLink无法使用嵌套的Lazy OneToMany关系填充Lazy OneToOne
- 25. JPA复合键@OneToOne(PersistentObjectException)
- 26. JPA双向OneToOne不工作
- 27. JPA OnetoOne映射返回null
- 28. 如何定义没有级联的单向OneToMany JPA关系?
- 29. 使jpa oneToMany关系有效吗?
- 30. JPA oneToMany with List and JoinTable
假设您需要'@ OneToMany',因为还有历史价格。认为你需要使用查询'findPirceByStatus(Long productId)'来获得当前奖金。 –