Re[3]: hibernate: сохранение collection (list) в строку табл
От: Donz Россия http://donz-ru.livejournal.com
Дата: 07.10.11 15:14
Оценка: 1 (1)
Здравствуйте, Blazkowicz, Вы писали:

D>>Offtop. А БД точно должна быть в таком денормализованном состоянии? Это, как видишь, уже вызывает проблемы.

B>Денормализация это один из способов оптимизиации производительности.

Я в курсе. Просто интересно, зачем это было сделано именно в этом случае. Особенно использование строки и разделителя.
Re: hibernate: сохранение collection (list) в строку таблицы
От: GarryIV  
Дата: 07.10.11 08:22
Оценка: +1
Здравствуйте, AlexL_, Вы писали:

AL_>Возможно ли в хибернейте сохранять коллекцию в строку?

AL_>например, была коллекция с элементами: "one", "two", "three"
AL_>и сохранилось в ячейку таблицы через разделитель: one, two, three

AL_>Если дадите пример мэппинга, буду очень признателен


АФАИК из коробки нельзя но можно сделать UserType и тогда без проблем
WBR, Igor Evgrafov
hibernate: сохранение collection (list) в строку таблицы
От: AlexL_ Россия  
Дата: 07.10.11 08:15
Оценка:
Возможно ли в хибернейте сохранять коллекцию в строку?
например, была коллекция с элементами: "one", "two", "three"
и сохранилось в ячейку таблицы через разделитель: one, two, three

Если дадите пример мэппинга, буду очень признателен
Re: hibernate: сохранение collection (list) в строку таблицы
От: Donz Россия http://donz-ru.livejournal.com
Дата: 07.10.11 12:30
Оценка:
Здравствуйте, AlexL_, Вы писали:

AL_>Возможно ли в хибернейте сохранять коллекцию в строку?

AL_>например, была коллекция с элементами: "one", "two", "three"
AL_>и сохранилось в ячейку таблицы через разделитель: one, two, three

Offtop. А БД точно должна быть в таком денормализованном состоянии? Это, как видишь, уже вызывает проблемы.
Re[2]: hibernate: сохранение collection (list) в строку табл
От: Blazkowicz Россия  
Дата: 07.10.11 12:59
Оценка:
Здравствуйте, Donz, Вы писали:

D>Offtop. А БД точно должна быть в таком денормализованном состоянии? Это, как видишь, уже вызывает проблемы.

Денормализация это один из способов оптимизиации производительности.
Re: hibernate: сохранение collection (list) в строку таблицы
От: . Великобритания  
Дата: 07.10.11 22:48
Оценка:
Здравствуйте, AlexL_, Вы писали:

AL> Возможно ли в хибернейте сохранять коллекцию в строку?

AL> например, была коллекция с элементами: "one", "two", "three"
AL> и сохранилось в ячейку таблицы через разделитель: one, two, three

AL> Если дадите пример мэппинга, буду очень признателен

А что мудрить-то?
@Entity
public MyEntity
{
  @Column(nullable=false)
  private String collection;

  @Transient
  void setCollection(Collection<String> col)
  {
    this.collection = Utils.join(col, ",");
  }

  @Transient
  Collection<String> getCollection()
  {
    return Arrays.asList(this.collection.split(","));
  }
}

Только это всё большой изврат... Непонятно, например, как hql-запросы должны маппиться и т.п.
avalon 1.0rc3 rev 0, zlib 1.2.3.4
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: hibernate: сохранение collection (list) в строку табл
От: GarryIV  
Дата: 10.10.11 12:21
Оценка:
Здравствуйте, ., Вы писали:

.>А что мудрить-то?

.>
.>@Entity
.>public MyEntity
.>{
.>  @Column(nullable=false)
.>  private String collection;

.>  @Transient
.>  void setCollection(Collection<String> col)
.>  {
.>    this.collection = Utils.join(col, ",");
.>  }

.>  @Transient
.>  Collection<String> getCollection()
.>  {
.>    return Arrays.asList(this.collection.split(","));
.>  }
.>}
.>

.>Только это всё большой изврат... Непонятно, например, как hql-запросы должны маппиться и т.п.

MyEntity entity = new MyEntity();
entity.getCollection().add("boom"); // <-- угадай что будет тут
WBR, Igor Evgrafov
Re[3]: hibernate: сохранение collection (list) в строку табл
От: . Великобритания  
Дата: 10.10.11 12:37
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>
GIV>MyEntity entity = new MyEntity();
GIV>entity.getCollection().add("boom"); // <-- угадай что будет тут
GIV>

Да, поторопился. Но суть та же:

@Entity
public class MyEntity
{
  private Collection<String> collection;

  @Transient
  public void setCollection(Collection<String> col)
  {
     this.collection = col;
  }
  @Transient
  public Collection<String> getCollection()
  {
     return this.collection;
  }

  @Column(nullable=false) // делаем package local, так что только hibernate их будет видеть. А может можно даже и private, но не уверен, надо тестить.
  String getCollectionStr()
  {
    return Utils.join(collection, ",");
  }
  void setCollectionStr(String s)
  {
    this.collection = new ArrayList<String>(Arrays.asList(s.split(",")));
  }
}
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.