在spring / jpa应用程序中标记为瞬态的字段的赋值寿命是多少?

时间:2014-05-30 15:02:27

标签: java spring hibernate jpa querydsl

我不确定这是正确的问题还是一套框架。

我知道在某种程度上涉及某些程度的框架清单是:

  • 弹簧
  • 休眠
  • QueryDSL

我一直试图在服务器端使用这些东西来处理Web应用程序,并且基本上得出的结论是服务器是静态方法的集合,其中只有状态,例如对象等单个方法调用的持续时间,基本上是一大堆反射代码生成,使事情容易混淆

我刚刚遇到了瞬态注释,这让我对窗外发生的事情产生了兴趣。

我不确定相关的是什么,所以我将描述我所看到的情况:

在登录时,我们正在查询数据库中包含用户信息的表。

更新

这是一个在定义的方法中实现UserDetailsS​​ervice(一个spring类)的类(loadUserByUsername(String username)。

在类扩展AbstractUserDetailsAuthenticationProvider中调用此方法,该方法被设置为身份验证提供程序。实际上,这意味着当用户登录我们的webapp时会调用它。在任何给定时间都可以有多个用户登录。


这是使用jpa存储库和一些querydsl谓词完成的。

UserDetails userDetails = userRepository.findOneLoaded(UserPredicates.hasUserNameEqualsIgnoreCase(username));

然后是令人困惑的一点:

    Division division = divisionRepository.findDefaultDivision((User) userDetails);
    ((User) userDetails).setCurrentDivision(division);

就是这样。 setter只设置一个标记为@Transient的字段,然后该堆栈中的代码都不使用该值。

它确实有分散在整个项目中的用法,但是可能会失败(没有任何测试,所以实际上可能就是这样!)如果它是空的。

这里发生了什么?这些作业能持续多久?我想在相关的说明中,其他'对象'持久的?我的这种东西的心理模型是否只是静态方法调用读取和写入数据库错误?它可以解释为什么应用程序会占用如此多的内存!我假设数据库的每一行的缓存版本都没有 - 它更像是内存字典中的每一行的键值对,当它们从它加载时被分配给它数据库?

我们正在尝试重构这些东西的一些更糟糕的部分,这让我有点担心我还不知道更多的魔法!

0 个答案:

没有答案
相关问题