我有一个像这样的场景
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TANDC_TYPE", discriminatorType = DiscriminatorType.STRING, length = 32)
@Table(name = "T_TERMS_AND_CONDITIONS", schema = DataSourceConfig.PERSISTENCE_SCHEMA_NAME)
public class TermsAndConditions {
...
}
它的儿童班具有鉴别价值" CREATOR"
@Entity
@DiscriminatorValue("CREATOR")
public class AccountTermsAndConditions extends TermsAndConditions {
...
}
另一个具有鉴别器值的子类" ORDER"
@Entity
@DiscriminatorValue("ORDER")
public class OrderTermsAndConditions extends TermsAndConditions {
...
}
在这里,我的要求是促进一种名为" USER"的新型帐户的条款和条件映射。这与我的AccountTermsAndConditions
。
现在,我不想再为帐户类型添加一个课程" USER" (类似于UserTermsAndConditon
)作为" CREATOR"和"用户"与账户类型有关。
我需要一个可能的解决方案来将我的鉴别器值设置为' CREATOR'或者'用户'根据账户类型。
有没有办法根据条件在类中设置我的鉴别器值?
我也看过oracle的文档,其中说明了:
"如果未指定DiscriminatorValue注释且a 使用鉴别器列,特定于提供者的功能 用于生成表示实体类型的值。"
如何继续实施?
请帮帮我。
答案 0 :(得分:1)
您可能想要利用的是@DiscriminatorFormula
,因为您正在使用单表继承。有了这个,我们可以将CREATOR
和USER
类型映射到CREATOR
,以便重用相同的java类类型。
@DiscriminatorFormula(
"case when TANDC_TYPE = 'ORDER' then 'ORDER' " +
"else ( " +
" case when TANDC_TYPE in ('CREATOR','USER') then 'CREATOR' " +
" else 'Unknown' " +
" end ) " +
"end "
)
我可能会建议将AccountTermsAndConditions
判别器更改为ACCOUNT
,然后将CREATOR
和USER
映射到上述SQL片段中的ACCOUNT
以保持一致。
您可以详细了解@DiscriminatorFormula
here。