2009-12-21 3 views
1

У меня есть класс Java со свойством, как этогоКак сохранить свойство Java типа Object с помощью Hibernate?

private Object myObj; 

Когда я пытаюсь сохранить класс с помощью Hibernate аннотации, я получаю довольно запутанное сообщение об ошибке «отображение свойства имеет неверное число столбцов».

Каков правильный подход к сохранению класса, содержащего такое общее свойство?

+1

Единственный способ, которым я знаю, это сериализация, и я не рекомендую это. Каждый раз, когда вы скомпилируете свое приложение, серализованная версия объекта в базе данных может стать устаревшей и не восстанавливаться. – Zoidberg

+0

один вопрос: что заставляет вас использовать 'Object' как тип для этого конкретного поля? Не могли бы вы использовать более специфический тип? – Romain

+2

@afielden: Как бы вы хотели, чтобы это сработало? Каким будет ваш идеальный конечный результат с точки зрения базы данных? – skaffman

ответ

0

Не используйте общий атрибут объекта, если вы можете ему помочь. Моя первая кисть с Hibernate означала наследование проекта с помощью подобных вещей, и это был мир боли. Как говорит Зойдберг, использование Object означает, что ваша модель не просто сериализована/версией (преуменьшение, если я честно).

3

Как вы сказали, объектом может быть изображение, видео и многое другое.

Если предполагается, что у вас есть только двоичные данные, вы можете создать другой класс и перенести данные с этого. В процессе передачи вы можете преобразовать Object в byte[] (в зависимости от конкретного типа) и использовать для этого его тип данных Lob (@Lob).

Чтобы продлить это действие, если поддерживаются не только двоичные данные, но и новый объект может иметь 2 поля - один в случае двоичного кода и один (или более) в случае других типов.

В любом случае, объект, какой он есть сейчас, представляет собой совершенно неразумный дизайн, и он не может быть сохранен должным образом без хлопот.

0

Изменить тип вашей собственности:

private byte[] myObj; 

Это работает для меня с Fluent NHibernate (хотя и в C#) и SQL тип поля VARBINARY (макс).

Вы можете представить это как изображение, видео или что-то еще. Пример преобразования изображения в Java:

ImageIO.read(new ByteArrayInputStream(myObj)); 
Смежные вопросы