我使用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”)静态地执行此操作。但这意味着我必须为每个实体做这件事。是否有更有活力的方法来实现这一目标?
答案 0 :(得分:1)
为什么要使用继承呢?只做它没有继承。
您可以使用getter / setters重命名字段
例如:
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 {
}