2013-05-08 3 views
2

Есть ли способ сохранить член Entity типа java.lang.Object?Спящий режим, сохраняющий объект Объект

позволяет сказать, что у меня есть сущность DynamicProperty которая имеет членов

private String name; 
private Object value; 

Значение может быть нескольких типов в основном не являющиеся сложные (String, Boolean, Integer, Decimal, Enum ...)

есть ли способ сделать это? и какой тип столбца DB (Oracle) должен быть.

ответ

0

Если это базовые типы, вы всегда можете попытаться сохранить их в виде строк, а затем отбросить их в нужные классы в своем геттере.

Существует еще один вариант - вы можете создать класс, который будет хранить тип значения и иметь поля необходимых типов, но только один из них установлен. Что-то вроде

class Foo 
{ 
    Integer a; 
    Double b; 
    String c; 
    int type; 

    //getters and setters 

    public Object getObject() 
    { 
     if (type == 1) 
      return a; 
     else if (type == 2) 
      return b; 
     return c; 
    } 
} 

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

Также обратите внимание на аннотацию @Embedded, это может помочь.

+0

Я не понял ваше первое предложение, если я храню их как VARCHAR, вы имеете в виду, что свойство java должно быть напечатано как String? как будет выполняться кастинг, когда вы не знаете тип? – Yoni

+0

Если мы говорим о целых и двойных, это просто - просто используйте Integer.parseInt() 'и в случае expection' Double.parseDouble() '. Если вы хотите использовать другие типы, вы можете сохранить первый байт строки в виде байта типа, например. 'int 7' будет' I7', 'double 3.14' -' D3.14', 'String foo' -' Sfoo' и т. д. У вас также может быть другое поле, которое будет содержать тип объекта, например, в моем коде пример и основать ваше литье на нем. – Mateusz

+0

слишком много работы вокруг – Yoni

0

Я нашел решение ... поскольку мой мой объект может быть определен как несколько ограниченных типов, базовый тип i помечен Объектом как сериализуемый столбец DB как BLOB, и он работал.

@Type(type = "serializable") 
private Object value; 

Неужели кто-то знает о производительности, если это? или любые другие проблемы, которые могут возникнуть.

+0

Производительность будет хуже, чем просто преобразование значения в строку. Но главная проблема заключается в том, что вы не сможете ничего делать с вашими данными, кроме кода Java. Даже просмотр данных с использованием вашего любимого клиента базы данных вам не поможет, потому что он будет храниться в двоичном формате Java, а не храниться как читаемая строка. Я бы использовал столбец для хранения типа объекта (Double, Boolean и т. Д.) И столбца для хранения строкового представления объекта. –

Смежные вопросы