我使用 EmailAlert bean 作为 DTO 通过 Hibernate 获取数据。所以,我的课程只包含我在 DB 中的字段。但在某些情况下,我需要在 EmailAlert 中添加其他字段来保存中间数据。例如“标题”字段 - 将在 java 端根据用户区域设置、时间等计算。
所以,我有一些变体来解决这个问题。
向 EmailAlert bean 添加附加属性(例如:标题),但不要将其映射到 DB 表的任何字段。缺点:在这种情况下,我们必须不要在 hashCode() 和 equals() 中使用“caption”属性,因为:
- 它真的没有问题 - 字段仅包含中间数据
- 我不确定这不是缓存和休眠本身问题的原因。
我认为拥有 class 的属性但不要在 equals() 和 hashCode() 方法中使用它是非常难看的。
将来有人可能会对这种逻辑感到困惑。
通过添加“caption”属性将 EmailAlert 扩展为 EmailAlertExt。以及将 EmailAlert 作为参数的构造函数。
但在这种情况下,我不确定水下石头是否会再次将 EmailAlert 作为 EmailAlertExt bean 存储到 DB 中。通过添加“caption”属性将 EmailAlert 扩展为 EmailAlertExt2,并引用原始对象。在这种情况下,EmailAlertExt2 的行为与原始 EmailAlert 相同,但我们需要额外的属性。如果我们保存 EmailAlert,我们可以调用 EmailAlertExt2 的 getOriginalValue(),它将返回对原始对象的引用。缺点:编码太多:)
伙计们,这些解决方案中哪个更好?可能有人有其他建议吗?