java – DiscriminatorFormula
如果我有一个表,我需要多个列作为鉴别器,我唯一的解决方案是使用@DiscriminatorFormula?
我问,因为一些原型设计给了我们一些我无法解释的结果. 失败的原型:最初我们使用超类上的一个@DiscriminatorColumn原型化一个3深的类层次结构,并在子类上包含第二个@DiscriminatorColumn.当然我们得到了这个警告:
我们发现更新有效,但插入没有.所以我们废弃了这个想法. 成功的?原型: 我们应该废弃它并只使用@DiscriminatorFormula来获得在2个鉴别器列上定义的显式关系吗? 解决方法
DiscriminatorFormula是DiscriminatorColumn的替代品.您使用其中一个批注超类(将实际表映射为默认值).
使用DiscriminatorColumn,它会创建一个包含鉴别器值的附加列(默认称为“dtype”). 您将注释放在超类中: @Entity @Table(name = "features") @DiscriminatorColumn public class Features{ //valid code } DiscriminatorFormula允许您检查数据库行内容并通过鉴别器值“选择”子类.没有创建其他(“dtype”)列. @Entity @Table(name = "features") @DiscriminatorFormula( "CASE WHEN num_value IS NOT NULL THEN 'NUMERIC' " + " WHEN txt_value IS NOT NULL THEN 'TEXT' end" ) public class Features{ //valid code } 在DiscriminatorFormula中,你只需要一些纯SQL来做你需要的. 您可以选择这两个选项中的一个,并且子类在两种情况下都完全相同. @Entity @DiscriminatorValue('NUMERIC') public class NumericFeatures extends Features { private Double numValue; public Double getNumValue() { return numValue; } public void setNumValue(Double numValue) { this.numValue = numValue; } //valid code } 在名为“features”的表中,您有两列“num_value”和“txt_value”,其中包含相应的值. 如果未指定继承策略,则默认为“SINGLE_TYPE”.如果是您选择的策略,则可以省略以下注释: @Inheritance(strategy = InheritanceType.SINGLE_TABLE) 无论是否有此注释,您都会得到一个名为“Features”的表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |