我有一个用户hibernate类,Clerk类和Consumer类。所有这些都映射到数据库中自己的表。用户PK还充当了Clerk和Consumer的PK。
所以现在我的问题是如果用户最初是一名职员,他在Users表和Clerks表中有一条记录。如果该用户想成为消费者,我想将该用户的记录链接到新的消费者记录。因此,即使我将userId传递给使用者的记录,它也会将其视为要保留的新用户,并提供duplicate_key异常。如何告诉Hibernate将相同的用户对象与这个新的Consumer对象链接?
答案 0 :(得分:0)
答案 1 :(得分:0)
根据您当前的实现,我认为您必须删除实际的Clerk
并在复制了所需的属性后保留新的Consumer
(这样就可以了解IMO)不要将Clerk
投射到Consumer
,反之亦然。如果您使用User
的功能键(如您所愿),这应该不是问题。
答案 2 :(得分:0)
根据我的经验,最好的方法是首先考虑对象和类,然后看看hibernate从中产生了什么。
当根据java说明你有多重继承(只对接口有效)和变异类型时,即你的用户首先是职员,后来是消费者。不这样做。
请考虑使用此模型:
用户拥有角色类到(子类)角色的映射。职员和消费者是角色。当您让角色对用户进行反向引用时,用户可以作为委托来提供每个用户拥有的属性和方法。
在代码中,这看起来类似于: class User { 地图,角色和GT;角色;
<T extends Role> T as(<Class<T>> roleClass>){
return (T) roles.get(roleClass);
}
应该漂亮,干净,灵活。并且很容易使用hibernate映射到数据库模式。