使用Spring Data JPA和Hibernate的主键列名

时间:2015-04-11 16:25:23

标签: java hibernate jpa

我使用Spring Data JPA和Hibernate作为持久性提供程序进行了以下设置。我的所有实体都继承自基类

@MappedSuperclass
public class BaseEntity {

  @Id  
  private id;

  @Version
  private String version;

  //more common fields
}

例如:

@Entity
public class Foo extends BaseEntity {

}

这将导致在“FOO”表上生成名为“ID”的主键列。我想更改主键列的命名。它应该反映类或表的名称。所以它应该是“FOO_ID”而不仅仅是“ID”。

我知道我可以使用@Column(name =“FOO_ID”)静态地执行此操作。但这意味着我必须为每个实体做这件事。是否有更有活力的方法来实现这一目标?

3 个答案:

答案 0 :(得分:1)

  1. 为什么要使用继承呢?只做它没有继承。

  2. 您可以使用getter / setters重命名字段

  3. 例如:

    class Foo {
    
      private Long id;
    
      public Long getFooId() {
        return this.id;
      }
    
      public void setFooId(Long fooId) {
        this.id = fooId;
      }
    }
    

答案 1 :(得分:0)

由于继承,所有子类都具有相同的ID列名,您可以为Base实体Class中的所有子类指定公共id列名称

答案 2 :(得分:0)

我知道这是一个老问题,但偶然发现了这个问题...最终在其他地方找到了这个解决方案:

@Entity
@AttributeOverride(name="id", column=@Column(name="FOO_ID"))
public class Foo extends BaseEntity {

}