在我的批准中,我总是使用懒惰的提取,因为我不需要每个关联
inTransaction(
var entity = repo.findById()
entity.setValue()
// optionally repo.save(entity)
)
您对此有任何意见吗?
我尚未对此进行测试,但我希望第二种方法会更快
您的方法(直接修改交易中的实体)是更有效,更简单和清洁的。另一方面,您的同事的方法在大多数情况下是繁殖的,尽管在数据层之间进行严格的分离或使用不可变的DTO进行业务逻辑转换时有用。 <=>为什么?
1。实体生命周期和持久性上下文
在带有冬眠的春季启动中,在交易中检索时,将在
垂直上下文中进行管理。对实体所做的任何更改都将在交易结束时自动持续,而无需明确的
save()
,这要归功于
dirtychecking.
。entity → DTO → modify DTO → DTO → entity → save
)会导致不必要的对象创建和额外的处理,从而增加了CPU和内存使用范围。 2。懒惰与急切的提取
3。当DTO有意义
:DTOS有助于避免直接暴露实体结构。
对于预测或转换:如果需要重塑数据,则DTO是一个不错的选择。dto封装不应直接映射到实体的字段(例如,一些计算的字段)。
更新过程涉及单独的验证或业务逻辑层,该层面不应直接与实体进行交互。4。性能期望
repo.save()