2016-03-23 4 views
0

Я делаю инструмент миграции базы данных и имею дело с исходной базой данных, которая очень громоздка. Это в основном один гигантский стол, который имеет более 40-50 столбцов. Однако не все эти столбцы полезны для меня. Мне только может быть около дюжины или около того. Как только я получу эти данные, я делаю запросы к веб-сервису, который будет обрабатывать все на конечной цели миграции.Могу ли я иметь объект, который только сопоставляется с некоторыми столбцами таблицы?

Мои параметры в основном создают запросы вручную, только для выбора столбцов, которые я хочу, или создания объекта, который отображает нужные столбцы. Я не очень разбираюсь в использовании JPA, поэтому я не уверен, что это возможно или хорошо.

Могу ли я сделать что-то вроде

@Entity 
class SomeEntity{ 

    @Column(name = "ColumnA") 
    private String columnA; 
    @Column(name = "ColumnB") 
    private String columnB; 
} 

, если столбцы в базе данных, например

Column A | Column B | Column C | Column D 

Волю EclipseLink карту только те столбцы, я аннотировать или будет жаловаться, пытаясь отобразить столбцы db для полей, которые не существуют в моей Entity? Я знаю, @Transient будет отмечать поля, которые не должны сохраняться. Но я хочу сделать обратное и игнорировать столбцы базы данных и лишь частично сопоставить таблицу с классом.

+2

Если они доступны только для чтения, вы можете отображать только несколько столбцов для объектов, без проблем. Выбранными будут только те столбцы, которые вы указали в '@ Entity'. Чтобы быть в безопасности, сделайте сеттеры «защищенными», чтобы обеспечить неизменность на уровне приложения. –

+0

В принципе, да, но вы должны определить '@ Id' (или эквивалент) в любом случае. Нет необходимости создавать представление на уровне базы данных, как это предлагается в принятом ответе. – stg

ответ

1

вы должны создать представление. Представьте, что у вас есть столько колонок, сколько вы считаете нужным. Определите эти столбцы как поля в классе и проведите проводки с аннотациями спящего режима, как обычно. Однако имейте в виду, что вы можете выполнять только выборки в представлении, и поэтому вставки/обновления/удаления не могут быть и речи.

+0

Массивная таблица читается только для того, чтобы выполнять только избранные. Можете ли вы подумать над тем, что такое взгляд? Что произойдет в моем примере выше? – JMD83

+1

@ JMD83 wiews создаются на уровне DB, вам действительно не нужны, если некоторые таблицы не должны соединяться. –