我有这堂课:
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来完成它?我一直试图找到一种方法来做到这一点,但到目前为止还没有找到...或者说我不是正确的方法!欢迎任何建议。先感谢您。
答案 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; }
现在,我对你的问题的评论中的第二个,我会考虑使用像ArrayList
和HashMap
这样的“moderner”数据结构。
另请注意,静态(和最终)实体字段始终被视为瞬态,即无法保留。