【问题标题】:Discriminator column not accessible鉴别器列不可访问
【发布时间】:2012-08-22 08:23:56
【问题描述】:

在@inheritance 类型中加入

我有班级人、员工和学生

我在 Person 中有公共列,如果我必须从 person 类访问它,则为鉴别器列设置 getter

@Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="PERSON_TYPE", discriminatorType=DiscriminatorType.STRING) 公共类人

@Column(name = "RELATIONSHIP_TYPE",insertable=false,nullable=false,updatable=false) 私有字符串关系类型;

// getter 和 setter

@DiscriminatorValue("学生") @PrimaryKeyJoinColumn(name="PERSON_ID") 公共课学生

@DiscriminatorValue("EMPLOYEE") @PrimaryKeyJoinColumn(name="PERSON_ID") 公共类员工

所以当我保存 Employee 或 Student 记录然后检索 Person 记录时,它给我的鉴别器列值为 NULL 但是在重新启动服务器后,它给了我相应的价值

如果我手动设置鉴别器列值的值,然后保存并检索然后它给我这个值(我需要手动设置鉴别器列值吗?) 那么使用鉴别器列有什么好处

为什么我不应该使用具有列类型的员工和学生的人与学生的 OneToMany 关系,并且通过枚举我可以将透视值输入到列中 我还将在这些列上应用延迟提取

请推荐

提前致谢 拉曼迪普·辛格

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我有相同的用例,但有一点不同。我有一个枚举 PersonType 和一个在每个扩展类中都被覆盖的抽象属性。 Hibernate 使用鉴别器来决定创建哪个类,而类决定哪个是鉴别器值,既作为映射又作为属性。

    pubilc abstract PersonType getType();
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多