2012-02-07 2 views
2

Я использую Hibernate для хранения модели данных, которая имеет ряд простых полей:Изменение типов полей в объекте спящего режима?

@Entity 
public class Shape extends DomainObject { 

    @LazyCollection(LazyCollectionOption.FALSE) 
    @CollectionOfElements() 
    private List<Shape> children; 

    @Column 
    private int numSides; 

    ... etc. ... 
} 

DomainObject суперкласс отслеживает Long id.

Мы хотели бы внести изменения в childrenList, так что вместо того, чтобы быть простой List, это на самом деле Map, где ключевым является Long id (от суперкласса).

@??? 
private Map<Long, Shape> children; 

Как переносится миграция/изменение типа этой природы в спящем режиме? Я не слишком разбираюсь в этом аспекте Hibernate - есть ли какой-то метод, который можно перегрузить, чтобы принять List<Shape> (при первой загрузке приложения, используя старые данные) и выполнить ручную генерацию нового Map?

ответ

2

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

+0

Предположим, что я использовал оригинальную модель данных некоторое время, и у меня есть Shape с 10 детьми. Когда я вношу изменения в модель данных и повторно запускаю приложение, что будет содержать Карта? Какими будут ключи? –

+0

Когда вы используете карту, вы должны использовать один из атрибутов целевого объекта (Shape) в качестве ключа карты, используя @MapKey. По умолчанию ключ является идентификатором целевого объекта. Таким образом, карта будет содержать все элементы списка, индексированные по их идентификатору. Если вам требуется изменение схемы, используйте свой предпочтительный инструмент SQL для переноса данных, а затем запустите приложение с новым сопоставлением. Но в этом случае это не обязательно. –

+0

У вас есть встроенные средства отображения/функциональности с поддержкой - Hibernate? Что-то, что может быть выполнено внутри нашего приложения? Наше приложение использует Hibernate как хранилище данных и используется на нескольких клиентских сайтах. Было бы утомительно посещать каждое местоположение и выполнять ручную миграцию SQL. (Для более сложных миграций, то есть.) –

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