加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 有没有办法使用SecondaryTable来跳转多个表?

发布时间:2020-12-14 05:55:43 所属栏目:Java 来源:网络整理
导读:假设我有一个名为UserProfile的主用户表,并且有一个显示名称. 我有各种各样的模块,您可以使用UserProfile和ModuleId来表示您的ModuleMembership.然后,您可以为每个不同模块的个人资料存储与该模块相关的数据,例如,如果您注册了PokerModule,您将获得一个Poker
假设我有一个名为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进行测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读