【问题标题】:How can i use @DiscriminatorColumn in the equals method of the entity?如何在实体的 equals 方法中使用 @DiscriminatorColumn?
【发布时间】:2011-12-08 15:06:20
【问题描述】:

实际上问题就在标题中。

实体将是系统中不同对象(博客节点、cmets 等)的地图评论 所以我希望能够使用此列(阅读它对于为特定类型的 Commented 对象类型构建评论树的价值。 我还想在equalshashcode 方法中添加@DiscriminatorColumn
最好的方法是什么?

【问题讨论】:

    标签: java inheritance jpa orm


    【解决方案1】:

    每当您加载实体时,都会出现此问题,鉴别器值始终为空。因此,如果您尝试在 equals 中添加鉴别器值,您可能会得到空指针,因此有两种方法:-

    1. 一个是当你使用鉴别器时,你有一定的子类,然后在子类的基础上你可以把两个对象等同起来。
    2. 您可以在实体中添加一种临时变量,然后在映射时可以将insert="false" update="false" 映射到该属性,这将使您的属性只读,然后您可以为该属性放置等号。李>

    例如:-

    private String tempDiscriminatorValue;
    <property name="tempDiscriminatorValue" type="string" column="DISCR_VAL" insert="false" update="false"/>
    

    【讨论】:

    • 感谢您的回复,但我认为,手动添加类型字段而不使用继承会更容易。看来我的情况不是使用继承的最佳方式。
    【解决方案2】:

    DiscriminatorColumns是用于继承的,A类的实例隐式不等于B类,所以我不明白你为什么要这样做??

    equals() 通常会做 a,

    if (object instanceof Foo) {
      return ...
    } else {
      return false;
    }
    

    【讨论】:

    • 我需要检查逻辑等价性(类型为 BlogComment 和文本 X 的评论等于类型为 BlogComment 和文本 X 的评论)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多