【发布时间】:2016-02-22 15:58:04
【问题描述】:
我有 3 个这样的元素:
public class ItemType {
@Id
private Long id = null;
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "itemTypeVO")
@MapKey(name = "company.id")
private Map<Long, ItemTypePurpose> purposeHash = null;
...
}
public class ItemTypePurpose {
@Id
private Long id = null;
...
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "idcompany")
private Company company = null;
...
}
public class Company {
@Id
private Long id = null;
...
}
我的问题是,我希望 Company 的 ID 作为我在 ItemType 中的地图的键。
我可以编译和部署应用程序而不会出现任何错误。可以持久化ItemType,一切顺利到DB。但是当我找回它时,地图键是“错误的”,我不知道正在使用什么信息,但可以肯定它不是公司 ID。也许是 ItemTypePurpose 的 ID。
公司正在正确加载到地图中,只是地图键错误。我试过谷歌,找不到任何东西。 JPA有什么方法可以用这个“嵌套属性”创建我的地图吗?
*对不起我的英语,如果你明白我的需要并且可以用更好的英文写作来编辑我的问题,请随意。
【问题讨论】:
-
我怀疑大多数人只会使用公司实例本身作为地图键。
-
可能是一个解决方案,具体取决于 equals() 和 hash() 实现以及对象内部填充的数据,否则 map 上的“get()”操作可能不会返回您的对象...跨度>
标签: java jpa eclipselink