java - 是否应该根据可读性和性能在实体中建模大型关系
问题描述
我有一个与一个非常大的表(> 100k Rows)相关的实体。现在我问自己是否应该在我的渠道实体中真正表达这种关系,因为永远不会直接调用 getProducts 将所有产品加载到内存中。我宁愿浏览一个产品存储库并查询该渠道的一个非常具体的子集。
我只是把它放在那里,所以从客户的角度来看它更具可读性。
@Entity
@Table(name = "Channel")
public class Channel {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private List<Product> products;
public void setProducts(List<Product> products) {
this.products= products;
}
public List<Product> getProducts() {
return this.products;
}
}
解决方案
简而言之:没有。
我认为您所问的可能是基于意见的,但这是我倾向于做的:删除所有“不可导航”的关系。
如果您使用某些生成器从数据库模型中获取 JPA 实体,则生成器将仅创建双向关系。您需要删除所有不会通过 ORM 机制使用的关系(为了可读性、可维护性和性能(以防有人想删除“惰性”指示或在事务中调用集合上的 getter)) .
例如,用户将链接到一种语言(多对一),但您不希望语言和用户之间的(一对多)关系,即使在某些时候您需要知道报告屏幕有多少用户说哪种语言。
推荐阅读
- react-native - 原生模块 NPM 包:无法安装原生 iOS 包
- node.js - AdonisJs 王牌 - E_IOC_LOOKUP_FAILED
- laravel - 根据 laravel 中的状态名称更改颜色
- django - 尽管解决了 `django.core.excptions.ImproperlyConfigured: The TEMPLATE_DIRS setting must be a list or a tuple` 错误,但列表和元组不起作用
- haskell - 解析输入'='的错误也许你需要在'do'块中使用'let'?例如'让 x = 5' 而不是'x = 5'
- python - 如何将 dtype 从“0”转换为“int64”?
- python - 2 个 3D 张量之间的张量点维度
- powerbi - Measure (CALCULATE) - 两个事实表
- javascript - 尝试在 Vue 组件中使用 Select2,但选项为空?
- networking - 无法使用 podman 公开端口