无法在@Transactional方法内加载Spring JPA Lazy抓取集合

时间:2019-11-28 11:37:39

标签: java spring hibernate jpa lazy-initialization

当将我的实体类型转换到该对象的构造函数中的另一种对象类型时,我无法在Service的方法(即@Transactional)中获取Spring Boot项目中的Lazy集合。

这是我的代码示例。我在项目中有两个差异数据库的两个transactionManager。

  1. firstTransactionManager
  2. secondTransactionManager

================================================ ================================================== 产品实体

public class PublicSource {
    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    private String id;

    @ElementCollection()
    @CollectionTable(name = "product_keywords", joinColumns = @JoinColumn(name = "product_id"))
    private List<String> keyWords;

    // rest of fields
    .
    .
    .
    .
    .
    .
    // getters and setters
}

产品服务方法

    @Override
    @Transactional(value = "firstTransactionManager")
    public ProductViewBo findOne(String id) {
        return new ProductViewBo(productRepository.getOne(id));
    }

ProductViewBo的构造函数

public ProductViewBo (Product product) {
        this.id = product.getId();
        this.keyWords = product.getKeyWords();

        // rest of fields
        .
        .
        .
        .
        .
        .
    }

错误:无法编写JSON:无法延迟初始化角色集合:com.raj.product.Product.keyWords,无法初始化代理-没有会话;

我正在获取通过非事务方法延迟获取的关键字,但在Transaction中调用它-因此应该可以。

-controller method
    -call service method
        -start transaction
              -hibernate do lazy loading.
               -- calling non-transactional method here (Typecasting Object here) 
                  // It should be fetch 
        -end transaction
    -end service method
-end controller method

我使用了propagation = Propagation.SUPPORTS,而Propagation的所有其他参数仍然得到相同的结果无会话

0 个答案:

没有答案