查看了很多地方,发现带有 postgresql 的休眠可以使用一个 IDENTITY 主键生成器,该生成器映射到串行/大串行表列。假设我有关注实体:
@Entity
class A {
long id;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() { return id; }
}
效果很好,ddl 看起来像:
create table A (id bigserial)
不幸的是,任何通过@ManyToOne 引用“a”的尝试都会产生同样是大序列的外键列。
@Entity
class B {
// id ommitted ...
A a;
@ManyToOne
public A getA() {
return a;
}
}
生成如下 ddl:
create table B (..., a_id bigserial)
在大多数情况下,这可以正常工作。但从逻辑上讲,它是完全错误的。a_id 也与 bigserial“数据类型”无关。
有什么方法可以告诉休眠对表 B 中的 a_id 列使用 bigint 吗?
试图用@JoinColumn 或@Column 注释中的columnDefinition 覆盖一个没有运气的getter。Hibernate 完全忽略了这些注解属性。