How to use `@CollectionTable` with JPA Buddy

125 Views Asked by At

I try to generate a Liquibase init Changelog with JPA Buddy.

Somehow, JPA Buddy is ignoring tables declared with @CollectionTable. Is it a feature that JPA Buddy does not cover?

Here is my definition:

    @ElementCollection(targetClass = CareerLevel.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "inventory_bundle_career_level",
            joinColumns = {@JoinColumn(name = "inventory_bundle_id", columnDefinition = "CHAR(36)")})
    @Column(name = "career_level", columnDefinition = "VARCHAR(50)")
    private List<CareerLevel> careerLevel = new ArrayList<>();
1

There are 1 best solutions below

1
On BEST ANSWER

Which version of JPA Buddy are you using? I'm using the latest version of JPA Buddy: 2023.2.3 and JPA Buddy generates a table for @CollectionTable correctly. For example, I created the following model based on the code snippet you provided:

@Entity
@Table(name = "inventory_bundle")
public class InventoryBundle {
    @Id
    @Column(name = "id", columnDefinition = "CHAR(36)")
    private String id;

    @ElementCollection(targetClass = CareerLevel.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(
            name = "inventory_bundle_career_level",
            joinColumns = {
                    @JoinColumn(name = "inventory_bundle_id", columnDefinition = "CHAR(36)")
            })
    @Column(name = "career_level", columnDefinition = "VARCHAR(50)")
    private List<CareerLevel> careerLevel = new ArrayList<>();
}

public enum CareerLevel {
    ENTRY_LEVEL,
    JUNIOR,
    MID_LEVEL,
    SENIOR,
    EXECUTIVE
}

And JPA Buddy generated the following script for it:

CREATE TABLE inventory_bundle
(
    id CHAR(36) NOT NULL,
    CONSTRAINT pk_inventory_bundle PRIMARY KEY (id)
);

CREATE TABLE inventory_bundle_career_level
(
    inventory_bundle_id CHAR(36) NOT NULL,
    career_level        VARCHAR(50)
);

ALTER TABLE inventory_bundle_career_level
    ADD CONSTRAINT fk_inventory_bundle_career_level_on_inventory_bundle FOREIGN KEY (inventory_bundle_id) REFERENCES inventory_bundle (id);

This script matches exactly what Hibernate ddl-auto generates. Maybe your model is slightly different? I would appreciate a more detailed description of the case so that I can check it out