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?