gpt4 book ai didi

java - 动态设置鉴别器值(Hibernate 映射)

转载 作者:行者123 更新时间:2023-11-30 07:14:28 24 4
gpt4 key购买 nike

我有一个这样的场景

@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”和“USER”都与帐户类型相关.

我需要一个可能的解决方案,根据帐户类型将我的鉴别器值设置为“CREATOR”或“USER”。

有什么方法可以根据条件在类中设置我的鉴别器值吗?

我还看到了预言机的文档,其中指出:

"If the DiscriminatorValue annotation is not specified and a discriminator column is used, a provider-specific function will be used to generate a value representing the entity type."

如何继续实现?

请帮帮我。

最佳答案

看来您可能想要利用的是@DiscriminatorFormula,因为您使用的是单表继承。这样,我们就可以将 CREATORUSER 类型映射到 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,然后将 CREATORUSER 映射到 为了保持一致性,在上面的 SQL 片段中添加 ACCOUNT

您可以阅读有关@DiscriminatorFormula的更多信息here .

关于java - 动态设置鉴别器值(Hibernate 映射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38683851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com