当前位置: 首页 > 知识库问答 >
问题:

为什么Hibernate在从@Transactional方法返回对象时不完全解析它(Spring boot)?

张晨朗
2023-03-14

我的ServiceImpl.java类中有一个方法包含这一行:

 @Transactional(transactionManager = JpaConfigCbOrg.TX_MGR)
    private Device getDevice(Long nbr)
    {

        Device device = deviceRepository.findById(nbr).get();
        return device;

    }

 @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "model_nbr", referencedColumnName = "model_nbr"),
            @JoinColumn(name = "dev_type", referencedColumnName = "dev_type")
    })
    private DeviceModel          model;

但是当我从这个@Transactional方法返回Device对象后查看它时,我没有看到实际的DeviceModel属性,而是一个对象代理。

为什么会这样?关于hibernate和事务,我缺少什么让我相信这个方法应该返回完整的对象?

共有1个答案

仲孙诚
2023-03-14

问题1:@transaction对私有方法没有任何影响,除非您使用基于aop的代理。get操作也不需要事务性属性,因为您不控制提交或刷新。

问题2:声明为lazy的对象将有代理,直到您调用lazy对象上的greeter。尝试device.getmodel()并检查Object。

 类似资料:
  • 可能只是我用错了,因为我对Kotlin和Moshi是新的。 为什么fromJson是null并且需要一个!!还是?。例如: 如果解析失败,缺少一个必需的字段,在我的例子中,它只会抛出一个异常。那么它如何解析一个“无效”的JSON响应而不失败,即返回null呢?

  • 首先,我收到来自post string属性和来自控制器的inputStream。 接下来,我的服务调用ParseGeojosnStream以流式传输文件的内容。 接下来,传递特性的名称和列表,并将其插入表中。 最后,使用字符串属性和表名作为id创建scheme。 那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢? 代码如下: log.info(“jsonGeomet

  • 本文向大家介绍jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?相关面试题,主要包含被问及jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?时的应答技巧和注意事项,需要的朋友参考一下 [jQuery] jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

  • 我有一个sql select查询,它只从数据库中检索单个列(组)(即),我在对象数组列表中接收上面列表的结果 , 理想情况下,结果应该包含一个对象数组列表,但是当我检查时,结果的第0个索引包含String object而不是object数组。 但是,如果我使用多个列(假设在查询的select子句中有2个列),我可以看到结果的第0个索引作为对象数组,即 即使查询的select子句中只提到一列,如何获

  • 问题内容: 用伪代码更好地解释自己。我目前正在学习Java。 如果我有方法 我不能,rs.close()因为我需要在检索它的方法中使用它,因此我将使用它,并且可能“关闭”我创建的新resultSet。 与先前的resultSet会发生什么?是否留给垃圾收集器收集?当我关闭“新” resultSet时,它会自行关闭吗?对代码效率/性能有影响吗? 任何反馈将不胜感激:),因为这让我有些困惑。我认为这更

  • 问题内容: 为什么没有(标准的,Java认证的)解决方案作为Java语言本身的一部分从Java方法返回多个值,而不是让开发人员不得不使用自己的方法(例如Maps,Lists,Pairs等) 。?为什么Java不支持n元组对象? 尤其要考虑一些琐碎的私有方法,这些方法可以一起修改两个对象(一前一后),在这种情况下,作为返回的类型化对象听起来过于杀伤力。 问题答案: 我假设OP的意思是“为什么Java