当前位置: 首页 > 面试题库 >

映射Hibernate实体以获得InheritanceType.SINGLE_TABLE的未知DiscriminatorValue

冯峻
2023-03-14
问题内容

我有一个经典的Hibernate
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorFormula。工作正常。但是,@DiscriminatorValue数据库中大约有500个不同的值,我需要将它们中的大约30个映射到Java类(子类),将其余的映射到父Java类。

可以将问题建模为对Animal类的示例继承。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
public class Animal implements Serializable {
  ...
  @Column
  public String getName() { ... }
}

因此,我在Java代码中使用定义了大约30个Animal的子类@DiscriminatorValue。当Hibernate发现鉴别器的未知值时,它将抛出WrongClassException。但是,我需要将这些未知的标识符值映射到一个实体,最好是Animal类。(在这种情况下,我只需要使用方法getName()即可。)

我知道一种解决方案是将SQL
CASE放入,@DiscriminatorFormula但随后我必须声明所有30个已知的鉴别符值(当我需要添加其他值时还要加上更多值)。因此,我正在寻找更灵活的解决方案。

PS这是一个遗留代码,因此我无法更改模型。


问题答案:

tscho为我指明了正确的方向,因此我能够找到适合我的情况的解决方案。该@DiscriminatorValue评估特殊值@DiscriminatorValue("null")@DiscriminatorValue("not null")。第二个是我的权利。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
@DiscriminatorValue("not null")
public class Animal implements Serializable {
  ...
  @Column
  public String getName() { ... }
}


 类似资料:
  • 我想映射类主题到主题表。 主题。JAVA 主题。哈佛商学院。xml 冬眠cfg。xml 我正在读取csv文件的内容,并希望使用以下代码将其插入数据库。 管理ata.java 我得到以下错误 线程“main”组织中出现异常。冬眠MappingException:未知实体:组织中的主题。冬眠impl。SessionFactoryImpl。getEntityPersister(SessionFactor

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。

  • 是否可以在不映射一对多关系的情况下设置级联? 我有两个实体: 和 如果我试图删除一个用户,并且存在该用户的任何记录,那么由于外键的原因,它显然会失败。我想在删除用户之前删除该用户的所有记录。我看到两种选择: > 映射s为关系中的,并设置。 在删除用户之前手动删除它们 有没有第三个选项,如何在用户实体中设置无映射记录的级联?

  • 我使用Hibernate已经有一段时间了,而且非常成功。然而,我昨天遇到了一个问题,这里的答案将在将来节省大量调试时间。 我忘了在我的hibernate中添加hibernate映射。新实体的cfg。 当我试图加载这个实体时,我本以为会得到某种运行时异常,但它却什么也没加载,继续运行,好像一切都很好。 我正在使用以下代码加载实体。 我想一个错误,如果我尝试加载一个实体,没有映射在我的hibernat

  • 问题内容: 我正在尝试使用注释将Spring与Hibernate结合使用,并且出现以下错误: 这是我的设置… 我的实体: 我的豆子: } 我在Spring中启用注释: 当我通过BlazeDS从Flex应用程序调用Foo.addBar方法时收到错误消息。 我真的很想避免其他配置,而且似乎所有这些都可以解决。 我正在使用Spring 3.0.0.RC1,Hibernate Annotations 3.

  • Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam