【发布时间】:2021-06-27 19:38:16
【问题描述】:
当我想添加CHECK 时,我试图找出Column 注释中columnDefinition 的语法。
到目前为止我已经尝试过:
@Id
@Column(columnDefinition = "CHAR(1) DEFAULT 'X' ADD CHECK 'X'")
private char Id;
@Id
@Column(columnDefinition = "CHAR(1) DEFAULT 'X', CHECK 'X'")
private char Id;
@Id
@Column(columnDefinition = "CHAR(1) DEFAULT 'X', CHECK (Id = 'X')")
private char Id;
使用 JPA 2.2 (JavaEE 8) 和 openjpa 作为 jpa 提供者。
在文档中找不到任何内容:https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html
我得到的错误:
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: 42X01 : [0] Encountered "\'X\'" at line 1, column 52 {stmn
t 1524146915 CREATE TABLE Parish (Id CHAR(1) DEFAULT 'X', CHECK 'X' NOT NULL, church SMALLINT, email VARCHAR(255), name
VARCHAR(255), officialName VARCHAR(255), phone VARCHAR(255), shortName VARCHAR(255), PRIMARY KEY (Id))} [code=30000, sta
te=42X01]
我显然可以看到 Id CHAR(1) DEFAULT 'X', CHECK 'X' NOT NULL,... 不是有效的 SQL 语法,但是当我使用 JPA 时,我不知道如何包含 CHECK。提前感谢您的帮助。
是否可以在列定义中包含 CHECK 约束?
【问题讨论】:
-
你真的想通过 JPA 定义你的数据库模式吗?对我来说似乎不是一个好的选择。
-
@plalx 为什么这对你来说不是一个好选择?
-
好吧,定义原生 CREATE TABLE 语句并使用原始 SQL 创建模式必须更简单,其次,如果您必须将原生 SQL 嵌入 JPA 映射中,则它违背了 DB 抽象层的目的。
标签: sql jpa jakarta-ee