2016-09-30 10 views
0

Вопрос: Я каким-то образом могу сопоставить два поля моего класса Entity только с одним столбцом в базе данных?Сопоставьте два поля в одной колонке базы данных

Сценарий: База данных не полностью нормализована. Существует один столбец, который содержит составную информацию. Это не мой фактический прецедент, но приемлемым примером может быть X- и Y-координата точки на плоскости. Таким образом, база данных может содержать строку 12:45, а класс Entity должен содержать только два целочисленных поля x значение ширины 12 и y со значением 45.

В настоящее время класс Entity имеет только два дополнительных приемника и сеттера для x и y и выполняет правильный перевод. Но мне интересно, есть ли способ позволить JPA сделать это для меня волшебным образом в фоновом режиме.

Я уже работаю с пользовательскими классами преобразователей, например. для правильного сопоставления между перечислениями и столбцами базы данных, но это работает только для сопоставления «один к одному» между полем класса Entity и столбцом в базе данных.

Конечно, это был бы самый предпочтительный способ переделать таблицу в базе данных, но на данный момент это не вариант.

Решения, специфичные для поставщиков, также прекрасны.

+0

Никогда не слышал об этом, но что я могу знать, я Джон Сноу. – Antoniossss

ответ

1

2 Entity поля в один столбец базы данных можно сделать довольно просто указав JPA использовать аксессор в объекте обрабатывать преобразование:

@Entity 
@Access(AccessType.FIELD) 
class myEntity { 
@Id 
int id; 
@Transient 
String x; 
@Transient 
String y; 

@Mutable //EclipseLink specific to prevent change tracking issues 
@Access(AccessType.PROPERTY) 
@Column(name="yourDatabaseFieldName") 
private String getCoords() { 
return x+":"+y; 
} 
private void setCoords(String coords) { 
    //parse the string and set x+y. 
} 

EclipseLink и Hibernate есть отображения преобразования, которые способны справиться с реверс ; 2 или более полей базы данных в одно свойство java, но это находится за пределами JPA.