我有3个要素是这样的:JPA映射键使用嵌套属性
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;
...
}
我的问题是,我想公司的ID为我的地图内的ItemType的关键。
我可以编译和部署应用程序没有任何错误。可以坚持ItemType,并且一切顺利到DB。但是当我把它拿回来时,Map键是“错误的”,我不知道正在使用什么信息,但肯定它不是公司ID。也许ItemTypePurpose的ID。
公司正在被正确加载到地图中,只是地图关键是错误的。我尝试谷歌,BU找不到任何东西。有没有办法让JPA用这个“嵌套属性”创建我的地图?
*对不起我的英语,如果你明白我需要什么,可以用英文写一篇更好的文章来编辑我的问题。
我怀疑大多数人会使用公司实例本身作为地图的关键。 – Chris
可能是一个解决方案,取决于equals()和hash()实现以及在对象内部填充的数据,否则映射上的“get()”操作可能不会返回您的对象... –