Как отобразить компонент класса Hashtable, используя JPA? - PullRequest
1 голос
/ 20 июня 2010

У меня есть этот класс:

public class DBRow {
    public String url;
    public String title;
    public static Hashtable<String, Integer> words;
    public Vector<String> keywords;
}

Что мне нужно сделать, так это сохранить множество экземпляров этого класса в базе данных.Я использую Hibernate и JPA, чтобы сделать работу.Используя JPA, я зашел так далеко (на самом деле далеко):

@Entity
@Table(name="MAIN_TABLE")
public class DBRow {

    @Column(name="url") 
    public String url;
    @Column(name="title")
    public String title;
    public static Hashtable<String, Integer> words;
    public Vector<String> keywords;

}

Я хочу, чтобы в моей базе данных было 3 таблицы - MAIN_TABLE - автоматически добавляемый идентификатор в качестве первичного ключа, URL-адреса и заголовка;HASH - содержит пару ключ-значение из Hashtable<String, Integer> и идентификатор для указания, к какому экземпляру класса DBRow он принадлежит (а также для ссылки на MAIN_TABLE);ВЕКТОР - почти такая же история, как HASH, но с Vector<String>.Так что я спрашиваю, горячо ли сопоставить хеш-таблицу и вектор, используя JPA, чтобы сделать это ??Я пытался найти способ сделать это, но пока не нашел ... или, может быть, я не на правильном пути!Любые предложения приветствуются.Заранее спасибо.

1 Ответ

1 голос
/ 21 июня 2010

Это невозможно с JPA 1.0 (по крайней мере, без стандартных аннотаций), и, поскольку вы не упомянули своего провайдера JPA, я расскажу только о JPA 2.0. В JPA 2.0 аннотация @ElementCollection может использоваться для сопоставления коллекции базовых типов или встраиваемых объектов.

Ниже приведены некоторые примеры, взятые из EclipseLink / Development / JPA 2.0 / отображения новой коллекции :

Пример 1. Коллекция элементов, представляющая базовое отображение коллекции.

@ElementCollection
@Column(name="DESIGNATION")
// CollectionTable will default in this case, Entity name + "_" + attribute name
// JoinColumns will default in this case which are different from BasicCollection collection table default
private Collection<String> designations;

Пример 2. Коллекция элементов, представляющая отображение основной карты.

@ElementCollection
@MapKeyColumn(name="Q_DATE")
@Column(name="QUOTE")
@CollectionTable(name="EXPERT_QUOTES", joinColumns=@JoinColumn(name="EBC_ID"))
public Map<Date, String> getQuotes() {
    return quotes;
}

Теперь я добавлю один комментарий к вашему вопросу, и я хотел бы рассмотреть возможность использования структуры данных "moderner", такой как ArrayList и HashMap.

Также обратите внимание, что статические (и конечные) поля сущностей всегда считаются временными, то есть не могут сохраняться.

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