java - JPA @UniqueConstraint 看不到列

标签 java hibernate jpa flyway

在 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/

相关文章:

java - 位运算符 java

java - 无法将加密格式从 Java 复制到 PHP

java - 是否有用于更改目录的 JVM 命令行选项?

java - 内存泄漏 - com.mysql.jdbc.ConnectionPropertiesImpl$*ANY*ConnectionProperty

java - 如何从循环外部获取每个循环的长计数值

java - 我应该更喜欢使用 JPA - 纯 SQL 还是 JPQL 以及如何使用 JPQL 和实体创建/删除表

java - 无法从 firebase 获取结果并显示在警报对话框中

java - HibernateUtil 不返回与 c3p0 池的连接

java - JPA 2.0 & Hibernate 4.0.1 & Spring 3.1.1 兼容性

java - 理解 JPA、EJB3 和 Web 服务