【发布时间】:2011-09-28 04:14:58
【问题描述】:
我正在迁移一些具有两个实体(Progress 和 PerformanceRating)的代码,这两个实体通过多对多关系相关联。每个 PerformanceRating 都有多个 Progress,每个 Progress 类型可以分配给多个 PerformanceRating。此外,每个 PerformanceRating->Progress 都有一个与进度相关的附加“数量”值。
当前 PerformanceRating 对象包含一个 Map,表示分配给 PerformanceRating 对象的每个 Progress 类型的进度“数量”。
编码如下:
@Entity
class PerformanceRating{
....
....
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "performance_rating_progress_reward", joinColumns = { @JoinColumn(name = "id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "amount", nullable = false, updatable = false) })
public Map<Progress, Integer> getRewardAmountByProgressMap() {
return this.rewardAmountByProgressMap;
}
但是,当我启动 JBoss(使用 hibernate 3.6/JTA/JPA)时,我收到以下错误:
Use of @OneToMany or @ManyToMany targeting an unmapped class: fwl.domain.model.PerformanceRating.rewardAmountByProgressMap[java.lang.Integer]
我发现了一个类似的线程 (Persist a Map<Integer,Float> with JPA),但该线程似乎处理非实体类型。在像我这样的情况下,我正在寻找实体/值类型映射,正确的语法是什么?
有没有办法在 Hibernate/JPA2 中做到这一点?
谢谢,
埃里克
【问题讨论】:
-
JPA 不适合 Map
的情况。 JDO 是唯一处理这种情况的持久性规范 -
感谢您的提示。我不了解 JDO,所以我花了一点时间阅读它,我觉得它很有趣。如果我在 6 个月前知道这一点,我会推动 JDO 实现而不是 JPA 实现。听起来它有很多好处。一定会在未来的项目中牢记这一点。
标签: java hibernate jpa jpa-2.0