Как сохранить свойство Java типа Object с помощью Hibernate? - PullRequest
1 голос
/ 21 декабря 2009

У меня есть класс Java с таким свойством

private Object myObj;

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

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

Ответы [ 3 ]

3 голосов
/ 21 декабря 2009

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

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

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

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

0 голосов
/ 16 марта 2010

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

private byte[] myObj;

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

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

ImageIO.read(new ByteArrayInputStream(myObj));
0 голосов
/ 21 декабря 2009

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

...