Hibernate char discriminator值

时间:2011-05-28 10:06:53

标签: hibernate jpa hibernate-mapping hibernate-annotations

为什么hibernate认为char鉴别器不安全?

Using default @DiscriminatorValue for a discriminator of type CHAR is not safe

3 个答案:

答案 0 :(得分:3)

可能是因为CHAR类型包含为每个值附加空格,直到结果文本具有列的长度。这会导致varchars不会出现各种令人讨厌的错误。

答案 1 :(得分:2)

你的继承树中是否有一个抽象的祖先?

当你有一个标记为@Entity的抽象基类时,Hibernate似乎认为抽象类应该有一个鉴别器值,即使该类型永远不会有数据库行。 There is a Hibernate bug for this issue.

一种解决方法可能是使用@MappedSuperclass。缺点:您将无法根据抽象类型进行查询,因为它不再是@Entity。

您可能希望重新评估继承是否真的适合您的实体模型。请参阅this question

答案 2 :(得分:1)

我认为这是因为CHAR的默认鉴别器值只是空格,这可能会导致各种误解。

当我有一个未使用@DiscriminatorValue注释的具体基类时,我遇到了此错误消息。添加注释时解决了错误。

确保映射类型层次结构中的每个具体类都包含@DiscriminatorValue,包括基类,并且此错误可能会消失。