unique-constraint - jpa-buddy 生成并非所有唯一约束的 ddl 模式

标签 unique-constraint

我有这个实体:

@Getter
@Setter
@Entity
@Table(name = "publications")
public class Publication {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "publication_id")
    private Long id;
    @NotBlank
    @Column(name = "titie", nullable = false)
    private String title;
    @NotBlank
    @Column(name = "text", nullable = false, columnDefinition = "TEXT")
    private String text;
    @ManyToOne
    @JoinColumn(name = "author_username", nullable = false)
    private User author;
    @CreationTimestamp
    @Column(name = "publication_date", nullable = false)
    private Instant publicationDate;
    @OneToMany
    @JoinTable(
            name = "publications_files",
            uniqueConstraints = @UniqueConstraint(columnNames = {"file_id", "publication_id"}),
            joinColumns = @JoinColumn(name = "publication_id"),
            inverseJoinColumns = @JoinColumn(name = "file_id")
    )
    private List<File> files;
}

当我按“show DDL”并选择 PostgreSQL 作为我的数据库时,它会给出以下结果:

CREATE TABLE publications
(
    publication_id   BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    titie            VARCHAR(255)                            NOT NULL,
    text             TEXT                                    NOT NULL,
    author_username  VARCHAR(50)                             NOT NULL,
    publication_date TIMESTAMP WITHOUT TIME ZONE             NOT NULL,
    CONSTRAINT pk_publications PRIMARY KEY (publication_id)
);

CREATE TABLE publications_files
(
    file_id        BIGINT NOT NULL,
    publication_id BIGINT NOT NULL
);

ALTER TABLE publications_files
    ADD CONSTRAINT uc_publications_files_file UNIQUE (file_id);

ALTER TABLE publications
    ADD CONSTRAINT FK_PUBLICATIONS_ON_AUTHOR_USERNAME FOREIGN KEY (author_username) REFERENCES users (username);

ALTER TABLE publications_files
    ADD CONSTRAINT fk_pubfil_on_file FOREIGN KEY (file_id) REFERENCES files (file_id);

ALTER TABLE publications_files
    ADD CONSTRAINT fk_pubfil_on_publication FOREIGN KEY (publication_id) REFERENCES publications (publication_id);

我期望表publication_files具有file_idpublication_id的唯一约束。但只有 file_id 在唯一约束中。 当我将 PostgreSQL 更改为 MySQL 时,结果是一样的。 我有什么错吗?这是一个错误吗?

最佳答案

是的,这是一个错误,我创建了一个票证来修复它 https://issues.jpa-buddy.com/issue/JPAB-2655

此外,如果files收集唯一元素,您可以使用Set而不是List - 在这种情况下,JPA Buddy将生成主键对于 file_id + Publication_id,并且不需要唯一约束。

关于unique-constraint - jpa-buddy 生成并非所有唯一约束的 ddl 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76984006/

相关文章:

java - 如何在单表继承(JPA)中使用@UniqueConstraint?

mysql - MYSQL中有 `on duplicate key insert`吗?

mysql - 如果其中一个字段已经是唯一的,我可以添加一个复合唯一键吗

postgresql - 两列之间唯一

PostgreSQL UNIQUE 约束未应用于 Docker 容器