gpt4 book ai didi

java - JPA @UniqueConstraint 看不到列

转载 作者:行者123 更新时间:2023-12-01 10:58:33 32 4
gpt4 key购买 nike

在 Spring JPA 中,我有一个实体,并使用 FlywayDb 初始化架构。我的实体是:

@Entity
@Table(schema = "scheduler",
uniqueConstraints={@UniqueConstraint(name = "uq_task", columnNames = {"task", "date_at"})}
)
public class Task {
@Id
private Long id;

@Embedded
@Column(nullable = false)
private ITask task;

@Column(nullable = false)
private Date dateAt;

}

架构初始化如下:

CREATE SCHEMA scheduler;

CREATE TABLE scheduler.task (
id bigserial primary key,
task bytea NOT NULL,
date_at timestamp NOT NULL
);

CREATE UNIQUE INDEX uq_task
ON scheduler.task(task, date_at);

没有实体的约束,它可以工作,没有实体则不行。特别是我有一个异常(exception):

Caused by: org.hibernate.AnnotationException: Unable to create unique key constraint (task, date_at) on table task: database column 'task' not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types)
at org.hibernate.cfg.Configuration.buildUniqueKeyFromColumnNames(Configuration.java:1684)
at org.hibernate.cfg.Configuration.buildUniqueKeyFromColumnNames(Configuration.java:1616)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1452)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)

我使用 H2 数据库。

ITask 是一个具有多个 POJO 实现的接口(interface)。 ITask 接口(interface)使用 @Embeddable 进行注释。

我的猜测是,JPA 尝试对 FlywayDb 库尚未创建的列应用唯一约束。但这对我来说毫无意义。

有什么想法吗?

最佳答案

现在更新您的问题后,我可以猜测您的 ITask 接口(interface)中的属性存在问题,请阅读 that文档。在我看来,您必须重写可嵌入实体属性才能解决您的问题。

关于java - JPA @UniqueConstraint 看不到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33467069/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com