Joe*_*Joe 3 sql database-design hibernate jpa
create table A (id, col_A, col_B, col_C)
Run Code Online (Sandbox Code Playgroud)
id =保留的每一行的唯一ID col_A 或 col_B将具有有效值,但两个列不会同时具有每个持久行的值.
例如
insert into A (id, col_A, col_C) values (1, "a", "c")
insert into A (id, col_B, col_C) values (1, "b", "c")
insert into A (id, col_A, col_C) values (1, "aa", "cc")
insert into A (id, col_B, col_C) values (1, "bb", "cc")
Run Code Online (Sandbox Code Playgroud)
注意:col_A和col_B不能按照设计合并为单个列.
我想基于上述限制强制执行col_A和col_B的条件非空检查(即,对于每个行至少应存在col_A或col_B).我如何实现这一目标?
编辑:1.我们想支持以下数据库从H2,MySQL,Postgres 2开始.我们还希望通过JPA注释而不是数据库特定语法来表达约束.3.底层ORM层是Hibernate 3.3.x
您需要定义表级检查约束.以下使用Oracle语法,但大多数DBMS产品都会有类似的东西....
alter table A add constraint a_or_b
check (
( a is not null and b is null )
or
( a is null and b is not null )
)
/
Run Code Online (Sandbox Code Playgroud)
编辑
在回应你的评论时,我猜它会是
@org.hibernate.annotations.Check(
constraints = “(a is not null and b is null) or (a is null and b is not null)”
)
Run Code Online (Sandbox Code Playgroud)
但作为数据建模者和DBA,这实际上是我想要在数据库中强制执行的事情.我不认为语法在RDBMS的不同风格上会有很大差异,如果有的话.
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |