当前位置: 首页 > 知识库问答 >
问题:

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

常培
2023-03-14

我有一个这样的场景

@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 {
...
}
@Entity
@DiscriminatorValue("ORDER")
public class OrderTermsAndConditions extends TermsAndConditions {
...
}

现在,我不想再为帐户类型“user”添加一个类(类似于usertermsandconditon),因为“creator”和“user”都与帐户类型相关。

我需要一个可能的解决方案,在这里设置我的鉴别器值要么‘创建者’或‘用户’的基础上,帐户的类型。

有没有办法根据条件在类内部设置我的鉴别器值?

我如何继续执行?

请帮帮我。

共有1个答案

端木桐
2023-03-14

由于您使用的是单表继承,因此您可能需要利用@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 "
 )

我可能建议将accounttermsandconditionsdiscriminator更改为account,然后在上面的SQL片段中将creatoruser映射到account以求一致性。

您可以在此处阅读有关@discriminatorformula的更多信息。

 类似资料:
  • 我有一个与鉴别器列连接的继承映射。 父实体: 附注。我使用的是hibernate 5.0.9.Final。

  • Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函

  • 我有一个具体的JPA实体超类,它使用鉴别器列与映射,还有两个子类实体,它们用其他属性扩展了这个超类。 在某些情况下,我希望指定额外的鉴别器值,而不必为每个类型显式定义子类(也就是说,并不是每个“baseEntity”都指定支持子类/单独表的额外属性)。这种策略在数据库设计和Java类层次结构中都很有效,但是,Hibernate JPA不允许这样做,并抛出,因为没有映射到鉴别器的子类: 在本例中,我

  • 如何为每个子类设置默认鉴别器? 例如,采用以下架构: 上述架构的代码生成器将创建一个客户端,其中 值必须由程序员显式设置。为什么默认情况下不能将 对象将 设置为? 我尝试使用来使其正常工作。但是,生成的代码包括阴影属性(子属性和父属性相同)。 从父对象中删除属性< code>petType也不太合适,因为从技术上讲,它更像是父对象的属性,而不是子对象的属性。 你对这个问题有什么解决办法吗?

  • 问题内容: 您好,我有一个子类,需要覆盖多个鉴别值。 就像是: @DiscriminatorValue(值=“ ACT”,“ DNR”,“ ATT”) 会让我完美。 我们拥有现有的数据,可以将多个鉴别符映射到一个类别(因为它们是我们系统将考虑的同一事物的相似类型) 问题答案: 您可以使用DiscriminatorFormula:

  • 我们有一个遗留表,我们不希望通过添加鉴别器列来改变它。有没有可能有不带鉴别器列的tablePerHierarchy。 下面是我的父级和子级代码 @Table(名称=“Shape1”)@Inheritation(策略=InheritanceType.Single_Table)@DiscriminatorColumn(名称=“Discriminator”,discriminatorType=discr