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

前端之家收集整理的这篇文章主要介绍了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进行测试.

猜你在找的Java相关文章