JPA Карта карт - PullRequest
       22

JPA Карта карт

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

У меня есть структура данных, которая сводится к:

class StylesheetUserPreferencesImpl {
    long id;
    String desc;
    Map<String, Map<String, String>> nodeAttributes;
}

Чтобы попытаться сделать аннотации JPA2 немного более разумными, я создал небольшой класс для представления внутреннего класса:

class LayoutAttributeImpl {
    String nodeId;
    private Map<String, String> attributes;
}

Что дает мне:

class StylesheetUserPreferencesImpl {
    long id;
    String desc;
    Map<String, LayoutAttributeImpl> nodeAttributes;
}

В конце концов мне бы хотелось, чтобы структура таблицы выглядела следующим образом:

SS_USER_PREFS
    PREFS_ID
    DESC

SS_LAYOUT_ATTRS
    PREFS_ID
    NODE_ID
    NAME
    VALUE

Я не совсем уверен, что делать с отображениемэто в JPA, хотя.Кажется, я хочу, чтобы LayoutAttributeImpl был Embeddable, но, насколько я понимаю, объекты Embeddable не могут содержать коллекции.У меня это работает прямо сейчас с LayoutAttributeImpl, действующим как полноценный @Entity, но это дает мне дополнительную таблицу, которая мне действительно не нужна.

1 Ответ

1 голос
/ 09 марта 2011

Как насчет чего-то вроде:

class StylesheetUserPreferencesImpl {
    long id;
    String desc;
    Map<AttributeCoordinate, String> attributes;
}

class AttributeCoordinate {
    String nodeID;
    String prefID;
}

Это очень просто отображает таблицы, которые вы хотите - Embeddables может быть ключом на картах, верно?Если вы всегда просматриваете атрибуты одновременно с узлом и идентификатором предпочтения, то вы можете скрыть эту слегка странную структуру объекта внутри геттера.

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

Имеет ли это какой-то смысл?Я только что съел много блинов, и, возможно, я не думаю прямо.

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