gpt4 book ai didi

java - 扩展DTO对象的更好的解决方案(Java,Hibernate)

转载 作者:行者123 更新时间:2023-12-02 00:04:55 25 4
gpt4 key购买 nike

我使用EmailAlert bean作为DTO通过Hibernate获取数据。因此,我的类仅包含我在数据库中拥有的字段。但在某些情况下,我需要在 EmailAlert 中添加其他字段来保存中间数据。例如“caption”字段 - 将在 java 端计算,具体取决于用户区域设置、时间等。

所以,我有一些变体来解决这个问题。

  1. 向 EmailAlert bean 添加附加属性(例如:标题),但不要将其映射到数据库表的任何字段。缺点:在这种情况下,我们必须不要在 hashCode() 和 equals() 中使用“caption”属性,因为:

    • 这确实没有问题 - 字段仅保存中间数据
    • 我不确定这是否是缓存和 Hibernate 本身出现问题的原因。
      我认为拥有类的属性但不要在 equals() 和 hashCode() 方法中使用它是非常丑陋的。
      将来有人可能会对这种逻辑感到困惑。
  2. 通过添加“caption”属性将 EmailAlert 扩展为 EmailAlertExt。以及以 EmailAlert 作为参数的构造函数。
    但在这种情况下,我不确定水下石头,以防我将 EmailAlert 作为 EmailAlertExt bean 再次存储到数据库中。

  3. 通过添加“caption”属性将 EmailAlert 扩展为 EmailAlertExt2,并引用原始对象。在这种情况下,EmailAlertExt2 将表现为原始 EmailAlert,但具有我们需要的其他属性。如果我们保存 EmailAlert,我们可以调用 EmailAlertExt2 的 getOriginalValue() ,它将返回对原始对象的引用。缺点:编码太多:)

各位,这些解决方案中哪个更好?也许有人有其他建议?

最佳答案

使用'@Transient'它不会映射到数据库,hibernate会忽略这个字段

关于java - 扩展DTO对象的更好的解决方案(Java,Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com