2011-05-28 68 views
2

爲什麼hibernate認爲字符識別器不安全?休眠字符識別器值

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

回答

1

大概是因爲CHAR型在於附加空格的每一個值,直到所得到的文本具有列的長度。這會導致各種各樣令人討厭的錯誤,這些錯誤不會與varchars發生。

1

是否有在你的繼承樹的抽象的祖先?

當你有標記爲@Entity一個抽象基類,休眠似乎認爲抽象類應該有一個鑑別值,即使永遠不會有該類型的數據庫行。 There is a Hibernate bug for this issue.

一個解決辦法可能是使用@MappedSuperclass。缺點是:你不能根據抽象類型進行查詢,因爲它不再是@Entity。

您可能希望重新評估是否繼承實際上是一個非常適合你的實體模型。見this question

1

我想這是因爲CHAR默認鑑別值就是空間,這可能會導致各種誤解。

我就遇到了這個錯誤消息時我有沒有用@DiscriminatorValue註解混凝土基類。添加註釋時解決了錯誤。

請確保映射類型層次結構中的每個具體類都有一個@DiscriminatorValue(包括基類),並且此錯誤可能會消失。