我有一个@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字段指定默认值?
答案 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