假设我有一个名为的主用户表UserProfile,并且在其上有一个显示名称.
我有各种各样的模块,你可以成为其中的一个,UserProfile并用ModuleId它来表示你的ModuleMembership.然后,您可以为每个不同的模块创建一个配置文件,以存储与该模块相关的数据,例如,如果您已注册,那么PokerModule您将获得一个PokerProfile.
我想把显示名称UserProfile放在上面PokerProfile,但我想以标准化的方式进行.我可以通过Hibernate或通过SQL来实现,无论哪种方式都可以.确切的关系是PokerProfile.membership.userProfile.displayName- 我怎么能把它变成课堂@Column上的PokerProfile?
您可以使用衍生属性来获取displayName你的PokerProfile类,如下所示:
@Formula(
"(SELECT up.displayName"
+ " FROM ModuleMembership mm"
+ " JOIN UserProfile up"
+ " ON (mm.userProfileId = up.userProfileId)"
+ " WHERE mm.moduleMembershipId = membershipId)")
String displayName;
Run Code Online (Sandbox Code Playgroud)
请注意,派生属性仅使用SQL,而不使用HQL. membershipId被定义为属性的@JoinColumn名称membership.其他列名称也是类似定义的.
但是,虽然它不是你要求的,但我通常在Java中实现我自己的快捷方式属性,如下所示:
@Transient
public String getDisplayName() {
if (membership == null) {
return null;
}
UserProfile userProfile = membership.getUserProfile();
return userProfile == null ? null : userProfile.getDisplayName();
}
Run Code Online (Sandbox Code Playgroud)
对我来说,快捷方式属性比相应的SQL更容易读写.
使用Hibernate 5.0.6.Final对H2数据库版本1.4.190测试代码样本.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |