@CollectionId使用关联序列加上默认

时间:2017-06-12 18:42:09

标签: java postgresql hibernate jpa

我有一个@CollectionId我希望行为与@Id @GeneratedValue(strategy = GenerationType.IDENTITY)在我的代码中其他位置的标识字段上的行为相同。也就是说,我希望为@CollectionID创建一个序列以及指定的默认值。

当我在我的代码中生成一个标识字段时:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;

..结果架构包含:

CREATE SEQUENCE product_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE ONLY product ALTER COLUMN id SET DEFAULT nextval('product_id_seq'::regclass);

请注意,为我的id字段创建了一个序列,并指定了使用该序列的默认值。这是我想要应用于@CollectionId的行为。

以下是我定义连接表的方法:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "customer_product",
        indexes = {@Index(columnList = "productId")},
        uniqueConstraints = @UniqueConstraint(columnNames = {"customerId", "productId"}),
        joinColumns = @JoinColumn(name = "customerId", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "productId", referencedColumnName = "id"))
@CollectionId(columns = @Column(name = "id"),
        type = @Type(type = "long"),
        generator = "sequence")
private List<Product> products = new ArrayList<>();

这并不是customer_product.id字段的默认值,也不是为id字段创建的序列。

如何配置@CollectionId注释以便创建序列并为id字段指定默认值?

1 个答案:

答案 0 :(得分:0)

使用@CollectionId注释中CREATE TABLE card_types ( card_type_id int(11) NOT NULL auto_increment, name varchar(50) NOT NULL default '', PRIMARY KEY (card_type_id), ) ENGINE = MyISAM ; 注释的columnDefinition属性为列定义指定postgres特定覆盖:

@Column