嵌入类和@ManyToOne之间的性能差异

15 浏览
0 Comments

嵌入类和@ManyToOne之间的性能差异

假设有一个类C,其属性是另一个类D。原则上,将D作为C的嵌入类存储,与通过@ManyToOne(甚至@OneToOne)将其作为独立实体存储相比,在检索时可以获得更好的性能,因为在后一种情况下,D需要从可能包含数百万行的单独表中检索出来。

我的问题是,这种性能差异是否显著,即它是否足够大以抵消在嵌入和@ManyToOne之间进行决策时的其他考虑因素。

我意识到这个问题有点主观,我想要的是有经验的人回答。

0
0 Comments

嵌入类和@ManyToOne之间的性能差异是一个有争议的问题。有人认为,嵌入类可以提高性能,因为它避免了多表连接的开销。另一些人则认为,@ManyToOne可以提高性能,因为它使用了外键和索引,可以更快地进行查询。

问题的出现原因是在设计模型时要考虑到性能问题。设计师需要考虑以下几个问题:

1. 'small class'是否具有独立的生命周期?还是只是一个概念上的粘合剂?

2. 'small class'是否可以为多个实体概念上相等?

3. 'small class'字段是否可为空?是否可为空?

4. 哪种Java模型更好(真实、自然)?

解决方法是根据实际需求和性能要求来选择合适的模型。如果'小类'具有独立的生命周期,并且在多个实体中可以概念上相等,则使用@ManyToOne可能更合适。如果'小类'字段很少被使用,并且可以延迟加载,则可以将其设计为嵌入类。

性能的优化应该基于逻辑模型的设计,而不是仅仅追求JPA性能。因为性能可能因为逻辑错误而下降,在代码的其他地方出现问题。

因此,设计师应该根据逻辑需求和性能要求来选择合适的模型,并权衡不同模型之间的性能差异。

0