昨晚,我正在研究一些示例代码。我完成了该示例,所有测试都通过了(使用postgres,从不使用h2),我很高兴,做了一些清理,签入,现在由于我不知道的原因,我的练习的主要目标现在失败了。 test faliure
用例是,我有一个拥有现有电子邮件模板系统的客户,该系统本质上是一个哈希映射表,但是具有一个复合键,使不同的客户可以从各种模板中进行选择。
该表具有一个用于标识唯一行的主键,以及两个用于标识客户和模板的辅助ID列,分别表示为category_id和sub_category_id。
我的目标是拥有一个实体,回想起来,我可能应该将其称为EmailTemplateMap,但目前称为KeyValueCategories。
KeyValueCategories应该包含电子邮件模板令牌的映射作为键,并包含完整的bean(KeyValue.java)作为值。
如果有人可以帮助我识别大海捞针,那将不胜感激!
提前谢谢!
https://github.com/rheaghen/jpa_map-key-composite-id-single-table
@Entity
@Table(name = "key_value_categories")
@IdClass(Category.class)
public class KeyValueCategories implements Serializable {
private static final long serialVersionUID = 1L;
@Id
long categoryId;
@Id
long subCategoryId;
@OneToMany(targetEntity = KeyValue.class)
@JoinColumns( {
@JoinColumn(name = "categoryId", referencedColumnName = "categoryId"),
@JoinColumn(name = "subCategoryId", referencedColumnName = "subCategoryId")
}
)
@MapKey(name="key")
private Map<String, KeyValue> keyMap;
...
}
@Entity(name="key_value")
@IdClass(KeyValueId.class)
public class KeyValue implements Serializable {
private static final long serialVersionUID = 1L;
long id;
@Id
long categoryId;
@Id
long subCategoryId;
private String key;
private String value;
...
}
public class KeyValueId implements Serializable {
private static final long serialVersionUID = 1L;
long id;
long categoryId;
long subCategoryId;
...
}
public class Category implements Serializable
{
private static final long serialVersionUID = 1L;
long categoryId;
long subCategoryId;
...
}