【问题标题】:Primary Key Column Name with Spring Data JPA and Hibernate带有 Spring Data JPA 和 Hibernate 的主键列名
【发布时间】:2015-06-17 06:43:12
【问题描述】:

我使用 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") 静态地执行此操作。但这意味着我必须为每个实体都这样做。有没有更动态的方法来实现这一点?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    由于继承关系,您的所有子类都将具有相同的 ID 列名,您可以为基实体类中的所有子类指定一个通用的 id 列名

    【讨论】:

    • 是的,但我想知道是否可以使 id 列名依赖于类/表名?因此,对于表 FOO,它将是 FOO_ID,对于表 BAR,它将是 BAR_ID。
    【解决方案2】:
    1. 那为什么要使用继承呢?无需继承即可。

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

    例如:

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

    【讨论】:

    • 我想到了继承,因为基本上所有子类实体都遵循相同的命名约定。能否请您详细说明一下选项 2。?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 1970-01-01
      • 2013-01-17
      • 2018-10-19
      • 2015-06-30
      • 2017-07-17
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多