如何使用JPA映射类的Hashtable组件?

时间:2010-06-20 16:08:46

标签: java jpa

我有这堂课:

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 - 自动icremented id作为主键,url和title; HASH - 包含来自Hashtable<String, Integer>和id的键值对,以引用它所属的DBRow类的实例(并且还与MAIN_TABLE相关);矢量 - 几乎和HASH一样的故事,但有一个Vector<String>。所以我要求的是热点来映射哈希表和向量,使用JPA来完成它?我一直试图找到一种方法来做到这一点,但到目前为止还没有找到...或者说我不是正确的方法!欢迎任何建议。先感谢您。

1 个答案:

答案 0 :(得分:1)

使用JPA 1.0(至少不使用标准注释)是不可能的,因为你没有提到你的JPA提供程序,我只会介绍JPA 2.0。在JPA 2.0中,@ElementCollection注释可用于映射基本类型或可嵌入对象的集合。

以下来自EclipseLink/Development/JPA 2.0/new collection mappings的一些示例:

  

示例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;
}

现在,我对你的问题的评论中的第二个,我会考虑使用像ArrayListHashMap这样的“moderner”数据结构。

另请注意,静态(和最终)实体字段始终被视为瞬态,即无法保留。