我有这个实体:
@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_id和publication_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/