java – 有没有办法使用SecondaryTable来跳转多个表?
假设我有一个名为UserProfile的主用户表,并且有一个显示名称.
我有各种各样的模块,您可以使用UserProfile和ModuleId来表示您的ModuleMembership.然后,您可以为每个不同模块的个人资料存储与该模块相关的数据,例如,如果您注册了PokerModule,您将获得一个PokerProfile. 我想将UserProfile中的显示名称放在PokerProfile上,但是我想以正常的方式进行.我可以通过Hibernate或通过SQL来做到这一点.确切的关系将是PokerProfile.membership.userProfile.displayName – 如何把它放到PokerProfile类的@Column中? 解决方法
您可以使用
derived property在您的PokerProfile类中获取displayName,如下所示:
@Formula( "(SELECT up.displayName" + " FROM ModuleMembership mm" + " JOIN UserProfile up" + " ON (mm.userProfileId = up.userProfileId)" + " WHERE mm.moduleMembershipId = membershipId)") String displayName; 请注意,派生属性仅使用SQL,而不是HQL. membershipId定义为会员资格的@JoinColumn名称.其他列名也被类似地定义. 然而,尽管这不是你所要求的,但我通常会在Java中实现我自己的快捷属性,如下所示: @Transient public String getDisplayName() { if (membership == null) { return null; } UserProfile userProfile = membership.getUserProfile(); return userProfile == null ? null : userProfile.getDisplayName(); } 对我来说,快捷方式的属性比对应的SQL更容易读写. 测试代码示例使用Hibernate 5.0.6.Final对H2数据库版本1.4.190进行测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |