Сохранять java.util. Свойства с Hibernate? - PullRequest
5 голосов
/ 18 ноября 2010

Как мне сохранить объект, в котором есть java.util.Properties объект?

Обратите внимание, что объект java.util.Properties может искать свойства не только сам по себе, но и в списке свойств по умолчанию . Список свойств по умолчанию сам по себе является другим Properties объектом, поэтому он также может иметь другой список свойств по умолчанию. Поиск одного свойства может пройти несколько Properties объектов до того, как свойство будет найдено.

Приложение, которое я создаю, нуждается в переопределяемых свойствах в иерархической манере, подобной предоставляемой Properties, поэтому я думал об использовании Properties вместо реализации моей собственной структуры данных. Но я запутался в том, как бы я их сохранил.

  • Нужно ли создавать пользовательский тип пользователя? Любые указатели о том, как сделать это для этой ситуации?
  • Кто-нибудь знает о практических или других ресурсах, демонстрирующих, как сохранить свойства в Hibernate?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

не уверен, что это «кусок пирога», но, поскольку вы можете хранить XML из экземпляра Properties и загружать экземпляр из XML, вы можете иметь свойство @Lob в вашей сущности, содержащее XML, которое будетсохранялось.Что-то вроде:

 class MyEntity implements Serializable {
   @Transient
   Properties props;

   @Lob
   byte[] xmlProp; //the xml as a byte[]

   //ids, getters & setters ommited

 }

И затем вы можете реализовать DAO для выполнения тяжелой работы по сохранению и извлечению вашей сущности:

 class MyEntityDAO {

   public void persist(MyEntity entity){

    try {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        entity.getProps().storeToXML(bos, "a simple comment if you like");

        byte[] byteStream = bos.toByteArray();
                entity.setXmlProp = byteStream;

                //save your instance with hibernate...

    } catch (IOException e) {
        e.printStackTrace();
    }
   }

   public MyEntity retrieveById(Long id){

      Properties propFromDB = new Properties();

      MyEntity ent = //retrieve the instance with hibernate...

      try{
        Properties propFromDB = new Properties();
        ByteArrayInputStream bais = new ByteArrayInputStream(ent.getXmlProp());
        propFromDB.load(bais);
        ent.setProp(propFromDB);
        return ent;
      } catch (IOException ioe){
       ioe.printStackTrace();
      }
      return null;
   }
 }

Проверьте методы storeToXML и loadFromXML в java.util.Properties API.

Надеюсь, это поможет;

3 голосов
/ 23 марта 2011

Первый вопрос: нужно ли вам хранить метаданные иерархии, или вы просто хотите сохранить все свойства.Если это буквенный регистр, то просто добавьте все свойства (используя getPropertyNames()) к концу Map и сохраните его (постоянные карты почти тривиальны)

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

Самый простой способ, который я представляю, - это иметь одну таблицу со следующими столбцами:

id | key | value | properties_set_id | parent_properties_set_id

Но как это сделать - яне могу думать сразу.Возможно сохранится Set<PropertyEntry>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...