【问题标题】:How override getter of id column in jpa configuration [duplicate]如何在 jpa 配置中覆盖 id 列的 getter [重复]
【发布时间】:2018-05-14 00:56:48
【问题描述】:

JPA 中的@Id 存在如下描述的问题? 有如下泛型类吗?

    @MappedSuperclass
    public abstract class BaseEntity<T> implements Serializable {

        private static final long serialVersionUID = 4295229462159851306L;

        private T id;
        public T getId() {
          return id;
        }
        public void setId(T id) {
           this.id = id;
        }

    }

还有另一个类是从它扩展而来的吗?

@Entity
@Table(name = "DOC_CHANGE_CODE" )
 public class ChangeCode extends BaseEntity<Long> {

     @Id
     @GeneratedValue(generator = "sequence_db", strategy = GenerationType.SEQUENCE)
     @SequenceGenerator(name = "sequence_db", sequenceName = "SEQ_DOC_CHANGE_CODE", allocationSize = 1)     
     public Long getId () {
       return super.getId();
     }
}

因为任何子类都有自己的序列,我必须指定任何子类@Id,因为我覆盖了它的getter,并在上面放了一些注释。不幸的是,它不能正常工作。 如何解决问题并实现目标?

【问题讨论】:

  • 很遗憾它不能正常工作”你能说得更具体些吗?
  • 正如我所解释的,任何表都有自己的顺序。我想将这些序列分配给它的表而不是@Generator。
  • 尝试使用return this.getId() 而不是return super.getId()
  • super.getId() 和 this.getId() 有什么区别?

标签: java hibernate jpa annotations


【解决方案1】:

试试这个:

@Entity
@Table(name = "DOC_CHANGE_CODE" )
@SequenceGenerator(name = "sequence_db", sequenceName = "SEQ_DOC_CHANGE_CODE", allocationSize = 1)     
@AttributeOverride(name = "id", column = @Column(name = "ID"))
public class ChangeCode extends BaseEntity<Long> {

    @Override
    @Id
    @GeneratedValue(generator = "sequence_db", strategy = GenerationType.SEQUENCE)
    public Long getId() {
        return id;
    }
}

【讨论】:

【解决方案2】:

无法从基类覆盖@Id

唯一的方法是提供your own custom IentifierGenerator并根据子类提供不同的逻辑(例如,使用基于子类名称的序列名称)。

这就是为什么adding the @Id attribute in the @MappedSuperclass only makes sense for the assigned generator or for IDENTITY

【讨论】:

  • 我从 Generic 类中删除了 @MappedSuperclass 并覆盖了我想要在我的实体中的任何文件的 getter。它有效。这是正确的解决方案吗?
  • 如果您删除了@MappedSuperclass,则不会继承任何属性,所以当然可以。但是,没有理由再保留基类。
  • @VladMihalcea 为什么这是工作? stackoverflow.com/questions/8589928/…
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2015-07-10
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多