当将我的实体类型转换到该对象的构造函数中的另一种对象类型时,我无法在Service的方法(即@Transactional)中获取Spring Boot项目中的Lazy集合。
这是我的代码示例。我在项目中有两个差异数据库的两个transactionManager。
================================================ ================================================== 产品实体
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
的所有其他参数仍然得到相同的结果无会话。