Hibernate:根据另一列的值为列强制执行相同的值

时间:2016-04-20 10:28:07

标签: hibernate

我们说我有一张桌子

sr_no |名字| REF_ID

1 |测试| 123个
   2 |测试| 123个
   3 | test1 | 456个
   4 | test1 | 456个
   5 | test2 | NULL
   6 | test3 | NULL

我的问题是,我想保留" name"的值。对于具有相同值" ref_id"的行,该列是一致的柱。例如,在上面的数据中,如果有人试图更新具有sr_no = 1的行的名称来表示test123,那么同名应该开始反映在sr_no = 2的行中,因为两者具有相同的值ref_id,即123。 请注意,我不想通过在单独的表中取出name和ref_id来规范化表,因为ref_id也可以是NULL。所以,我想以某种方式使用hibernate来保持单个表来强制执行它。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这个问题不是Hibernate的工作,它是你的功能代码的工作。

如果您想要了解所描述的结果,请使用hibernate检索在where子句中传递REF_ID的实体集合。然后对功能代码中的所有实体进行相同的更新。

根据您提供的数据,如果REF_ID为NOT NULL,我假设您要忽略此规则。同样,您希望将其作为功能代码(不是休眠)的检查。

最后 - “因为ref_id也可以为NULL”不是不归一化的正当理由。数据模型可以很好地与NAME和REF_ID(可空)保存在一个表中,并且您的SR_NO具有外键。

E.g。

TEST_TABLE

ID | NAME | REF_ID
1 | test | 123
2 | test1 | 456
3 | test 2 | null
4 | test 3 | null

SR_TABLE

SR_NO | TEST_ID
1 | 1
2 | 1
3 | 2
4 | 2
5 | 3
6 | 6

希望这有帮助