3

查看了很多地方,发现带有 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 完全忽略了这些注解属性。

4

0 回答 0