假设我有一个名为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 – 有没有办法使用SecondaryTable来跳转多个表?的更多相关文章

  1. swift – 不能调用非函数类型’CIImage?’的值?

    用Xcode游乐场测试7.1.1.和Swift2.1这是因为,一旦进入UIImage,CIImage一词被视为UIImage的CIImage财产,由于隐含的自我作为消息收件人–换句话说,Swift将你的CIImage变成self.CIImage,从那里下降.您可以通过Swift使用模块命名空间来消除歧义:编辑在Swift3中,这个问题会消失,因为所有的属性将以小写字母开始.该属性将被命名为ciImage,并且不会与CIImage类混淆.

  2. 单元测试 – UIApplication.sharedApplication().委托作为AppDelegate在swift单元测试中使用它导致EXC_BAD_ACCESS

    我正在尝试在swift中使用单元测试来测试一些真正的应用程序行为.当我尝试从我的测试函数将deUIApplicationDelegate投射到我的AppDelegate时,我得到了EXC_BAD_ACCESS异常.测试代码下方:AppDelegate类设置为public,因此从访问级别来看不是问题.在同一个测试目标中使用objective-c可行.简单说明下面:debuger说someDelega

  3. android-gradle – 用于库模块覆盖的Android检测测试

    解决方法对于读这篇文章的人来说……如果你有同样的问题,是时候开始敲打你的头了……

  4. 在Android上同步SQL数据库与REST远程服务器的最佳实践

    编辑:例如,采用方法2,重写的ContentProvider#bulkInsert使用数据库事务可以大大加快批量插入操作:见thisquestion.解决方法最佳选择需要适当的API实现–何时应存储一些db_version.并且在更新服务器期间响应数据和操作类型–添加,更新,删除.

  5. 可以从Android SQLiteConstraintException获取特定的错误详细信息?

    我对某些数据收到以下错误,概念很清楚:但是,这并没有帮助我找到哪个特定记录具有无效的FK.而不是颠覆我的代码并尝试用新事务隔离每个插入,是否有任何方法可以打开(或提取)日志记录,使用有用的详细信息,例如有问题的表,甚至导致问题的FK值?

  6. android – 没有SQL的ContentProvider

    我有两个数据需要从外部应用程序访问并存储.根据文档,ContentProviders是唯一可能的方式,但它也提到了外部存储.ContentProviders实现类似数据库的“接口”,对于两个数据,使用数据库是非常不必要的.我宁愿将它们保存到文件中,但是通过实现抽象方法使用ContentProvider是有问题的,因为这些方法被构造为数据库查询.我知道没有任何指定ContentProviders必须使用下面的数据库来存储数据,但有没有其他方法来存储必须共享到文件系统的最小数据量?

  7. android – 运行单元测试用例时的Multidex限制命中

    我有一个应用程序,我有本地单元测试和仪表单元测试用例.现在,如果我点击androidTest文件夹,然后单击“运行所有测试”,它将抛出以下异常.这个例外显然是因为达到了multidex限制.但是我已经为调试版本启用了multi-dex.我想当运行检测测试用例时,它们以调试模式运行.那为什么会发生这种异常呢?

  8. Android SQL:检查数据库中的记录是否存在

    我正在尝试根据特定的ID查询我的数据库.如果这是第一次运行活动,则表将与id列一起存在,但不会有具有特定ID的记录.如何检查特定记录是否存在,如果不存在,请添加它?关于检查特定列是否存在,我发现了很多内容,但没有关于检查特定记录是否存在的信息.到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但实际上由于某种原因返回1.我可以在if语句中使用什么来验证是否尚未创建id列?

  9. android – Espresso读取字符串文件值

    我想在我的androidTest模块中保留一个Sting和Raw文件,并在Espresso测试中需要时读取它.我在androidTest下保留res文件夹,并且能够同步并生成R文件.但是当我尝试使用时访问字符串资源getTargetContext.getString(R.string.product_name)或使用mAcitivityRule.getActivity.getString(R.st

  10. android – AppCompat库23.2.1不使用espresso v2.2.2

    我有一个android项目,我使用espresso来定义测试.这一切都运行良好,但在升级到AppCompat23.2.1之后,测试的执行总是崩溃.我的build.gradle依赖项:该项目编译并执行正常,但是当我尝试运行测试时,它会因此错误而崩溃:尽管错误的文本我使用Theme.AppCompat的后代主题,所以我根本不理解错误消息.有人有同样的问题吗?它似乎与appcompat和espresso的依赖关系有任何问题,但我无法找到它并解决我的问题.有任何想法吗?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部