2017-06-12 6 views
0

Ich habe eine @CollectionId, die ich möchte, dass sich das gleiche Verhalten, dass @Id @GeneratedValue(strategy = GenerationType.IDENTITY) verhält sich auf Identitäten Felder an anderer Stelle in meinem Code. Das heißt, ich möchte eine Sequenz für die @CollectionID zusammen mit einem angegebenen Standardwert erstellt werden.@CollectionId mit assoziierten Sequenz plus eine Standardeinstellung

Wenn ich ein Identitätsfeld in meinem Code wie folgt erzeugen:

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

..die resultierende Schema enthält diese:

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); 

Beachten Sie, dass eine Sequenz, die für meine ID-Feld erstellt wird und dass Ein Standardwert, der diese Sequenz verwendet, wird angegeben. Dies ist das Verhalten, das ich auf meine @CollectionId anwenden möchte.

Hier ist, wie ich einen Tisch beitreten bin definieren:

@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<>(); 

Dieses mich nicht erhalten einen Standardwert auf dem customer_product.id Feld, noch ist eine Sequenz für das ID-Feld erstellt.

Wie kann ich die Annotation @CollectionId so konfigurieren, dass eine Sequenz erstellt und ein Standardwert für das ID-Feld angegeben wird?

Antwort

0

über die Eigenschaft der columnDefinition@Column Annotation in der @CollectionId Annotation postgres spezifische Überschreibungen die Spaltendefinition angeben:

@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", columnDefinition = "serial NOT NULL"), 
    type = @Type(type = "long"), 
    generator = "sequence") 
private List<Product> products = new ArrayList<>(); 
Verwandte Themen