2013-08-07 1 views
1

Я новичок в JPA и не смог найти хорошее решение Google для этого. Я хочу создать аннотацию JPA для LinkedHashMap строк. Вот твист, у меня есть абстрактный класс, который я сопоставляю как mappedSuperClass. Так что каждая реализация этого суперкласса имеет LinkedHashMap строк. Вот мой пример:JPA LinkedHashMap аннотации

@MappedSuperclass 
public abstract class AbstractCustomerType implements Serializable 
{ 

@ElementCollection //is this right? 
protected LinkedHashMap<String, String> customerData; 
} 

А что можно ожидать в моей базе данных? Каждая реализация AbstractCustomerType имеет свою собственную таблицу соединений customerData? В этом случае, если у меня есть 10 CustomerTypes, у меня будет 10 таблиц CustomerData? Как я буду комментировать это, чтобы получить только одну таблицу customerData, которая разделяется между всеми типами клиентов?

ответ

0

Попробуйте использовать аннотацию @CollectionTable для определения отдельной таблицы. Также убедитесь, что ваши идентификаторы уникальны для всех подклассов (используйте одну и ту же последовательность).

Также рассмотрите возможность использования НАПРАВЛЕННОГО наследования.

JPA технически допускает только интерфейсы, но EclipseLink позволит реализовать (если EAGER или LAZY в dev строит (2.6)).

2

Это не сработает. Стойкие коллекции должны быть напечатаны с типом интерфейса, а не с конкретным типом: Map, Set или List, но не HashMap, LinkedHashMap, HashSet или ArrayList.

Смотрите страницу 23 из the specification:

Коллекция многозначных постоянные поля и свойства должны быть определены в терминах одного из следующих интерфейсов сбора многозначных независимо от того, в противном случае прилипает класс сущности конвенций метод JavaBeans выше, и используется ли доступ к полям или свойствам: java.util.Collection, java.util.Set, java.util.List, java.util.Map.