У меня есть класс Java, который имеет несколько подклассов. Каждый из подклассов имеет поле state
. В зависимости от класса это может быть тип String
, Double
, Integer
или Boolean
. Я хочу сохранить эти классы в реляционной базе данных, и я использую Hibernate для ORM. До сих пор я думал, что InheritanceStrategy = TABLE_PER_CLASS
будет правильным решением. Когда я использую postgresql (9.4 и 9.6), я сталкиваюсь с
SQL Error: 0, SQLState: 42804
UNION types boolean and integer cannot be matched
. В случае postgres я вижу, что Hibernate создает запрос, который, очевидно, завершится неудачей (https://forum.hibernate.org/viewtopic.php?f=1&t=1002668).
На самом деле, используя базу данных и драйвер H2, это хорошо работает для меня. В общем, обходной путь может заключаться в отображении state
в столбец для класса. Затем я мог бы также использовать стратегию SINGLE_TABLE
. Но поскольку все работает хорошо, используя H2,Я думаю, что мой предыдущий подход не является неправильным и должен как-то поддерживаться.
Для некоторого минимального примера кода также загляните в оставшийся без ответа пост https://forum.hibernate.org/viewtopic.php?f=1&t=1002668.