我有一个这样的场景
@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”都与帐户类型相关。
我需要一个可能的解决方案,在这里设置我的鉴别器值要么‘创建者’或‘用户’的基础上,帐户的类型。
有没有办法根据条件在类内部设置我的鉴别器值?
我如何继续执行?
请帮帮我。
由于您使用的是单表继承,因此您可能需要利用@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
discriminator更改为account
,然后在上面的SQL片段中将creator
和user
映射到account
以求一致性。
您可以在此处阅读有关@discriminatorformula
的更多信息。
我有一个与鉴别器列连接的继承映射。 父实体: 附注。我使用的是hibernate 5.0.9.Final。
我有一个具体的JPA实体超类,它使用鉴别器列与映射,还有两个子类实体,它们用其他属性扩展了这个超类。 在某些情况下,我希望指定额外的鉴别器值,而不必为每个类型显式定义子类(也就是说,并不是每个“baseEntity”都指定支持子类/单独表的额外属性)。这种策略在数据库设计和Java类层次结构中都很有效,但是,Hibernate JPA不允许这样做,并抛出,因为没有映射到鉴别器的子类: 在本例中,我
Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函
如何为每个子类设置默认鉴别器? 例如,采用以下架构: 上述架构的代码生成器将创建一个客户端,其中 值必须由程序员显式设置。为什么默认情况下不能将 对象将 设置为? 我尝试使用来使其正常工作。但是,生成的代码包括阴影属性(子属性和父属性相同)。 从父对象中删除属性< code>petType也不太合适,因为从技术上讲,它更像是父对象的属性,而不是子对象的属性。 你对这个问题有什么解决办法吗?
问题内容: 您好,我有一个子类,需要覆盖多个鉴别值。 就像是: @DiscriminatorValue(值=“ ACT”,“ DNR”,“ ATT”) 会让我完美。 我们拥有现有的数据,可以将多个鉴别符映射到一个类别(因为它们是我们系统将考虑的同一事物的相似类型) 问题答案: 您可以使用DiscriminatorFormula:
我们有一个遗留表,我们不希望通过添加鉴别器列来改变它。有没有可能有不带鉴别器列的tablePerHierarchy。 下面是我的父级和子级代码 @Table(名称=“Shape1”)@Inheritation(策略=InheritanceType.Single_Table)@DiscriminatorColumn(名称=“Discriminator”,discriminatorType=discr