当前位置: 首页 > 面试题库 >

有没有办法在没有DTO的情况下将Hibernate实体公开为RESTful资源?

谭成业
2023-03-14
问题内容

我正在开发一个简单的Webapp,它将域模型公开为RESTful资源。我打算将JPA2(Hibernate)与SpringMVC REST支持一起使用。

在将Hibernate实体编组为XML /
JSON时,如果该实体分离,它将为惰性子项关联抛出LazyLoadingException。如果实体仍然连接到Hibernate
Session,它将几乎加载整个数据库。

我尝试使用推土机CustomFieldMapper确定该属性是否为未加载的惰性Hibernate集合,然后返回NULL。

但是,如果我们有双向关联Hibernate的热切加载许多-TO- 一个
侧面和推土机将尝试复制,这将导致在StackOverflow的错误无限循环结束的属性。

我知道解决此问题的唯一解决方法是使用DTO,并将所需的属性仅复制到干净的POJO(DTO)中,然后将其编组到XML /
JSON中。但是,复杂的域模型手动复制属性非常痛苦。

是否有其他干净/简单的方法来(不)编组Hibernate实体?


问题答案:

在GWT应用程序中来回传递Hibernate’s
VO时,我遇到了类似的问题,在某些项目中使用Dozer取得了很好的效果,而在其他项目中,使用了本文中介绍的方法,在编组之前,基本上没有Hibernate代理。

希望对您有帮助,



 类似资料:
  • 所以我想要一个“Void Repository”,通过它可以访问不一定在实体上操作的存储过程。 但这当然不起作用,因为期望是一个实体。 有没有一种方法可以使用注释而无需创建虚拟实体,或者我是否坚持使用使用通过准备好的语句进行查询的已实现类? 因为老实说,这很难看:

  • 我有以下2个实体: 它们有共享字段/列,例如:等,但是每个主键id字段的名称不同,例如有和 有没有一种方法可以创建一个基本实体超类来保存这些通用的

  • 我再次编写另一个银行系统插件,但这次是使用ATM。我正在尝试弄清楚如何在单击该选项后获得玩家聊天输入,以防止单击100次以在银行帐户上存入50,000美元。 我正在用Paper-Spigot 1.14.4编写这个插件,我尝试了以下步骤: 作为一个单独的类,仅当我向插件管理器注册事件时才激活: 使用 get 和 set-method创建一个 变量 ,并在需要时在该方法中调用它。 我当前的方法: 获取

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 问题内容: 关于将行旋转为各种数据库的列,有很多文章。他们似乎分为两个阵营,使用案例语句或使用数据库供应商的内置功能。我正在使用 MySQL ,到目前为止,尚未在任何内置函数上找到任何东西,该函数使我可以选择任意数量的行值(希望将其转换为列)。如果我不提前知道这些值,则无法构建经常出现在stackoverflow上的CASE查询。我想知道MySQL中是否有类似于其他数据库中称为交叉表或数据透视表的

  • 问题内容: 我有一种方法可以做很多事情。其中包括进行大量插入和更新。因此宣布… 它的工作完全符合预期,我对此没有任何问题。但是在某些情况下,尽管没有异常,但我还是想强制回滚…目前,当我遇到合适的条件时,我正在强制异常,但这很丑陋,我不喜欢它。 我可以以某种方式积极地调用回滚吗?异常调用它…我在想也许我也可以。 问题答案: 在Spring Transactions中,您使用。 您在这里遇到的问题是您