首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >org.dozer.MappingException: java.lang.NoSuchMethodException: org.hibernate.internal.SessionImpl.<init>()

org.dozer.MappingException: java.lang.NoSuchMethodException: org.hibernate.internal.SessionImpl.<init>()
EN

Stack Overflow用户
提问于 2022-08-04 11:12:09
回答 1查看 58关注 0票数 0
代码语言:javascript
运行
复制
    @Override 
    public List<Order> findByOrderId(final Long orderId)
    {
        Criteria c = this.getHibernateSession().createCriteria(Order.class);
        c.createCriteria("context").add(Restrictions.eq("orderId", orderId));
        c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        List<Order> list = c.list();
        return list;
    }

当上述数据映射时,接收到的订单实体使用dozerMapper命令vo。

代码语言:javascript
运行
复制
Consider a for loop here.
OrderVO orderVO = this.dozerMapper.map(order, OrderVO.class);

出现以下错误:

代码语言:javascript
运行
复制
org.dozer.MappingException: java.lang.NoSuchMethodException: org.hibernate.internal.SessionImpl.<init>()
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:82)
at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:261)
at org.dozer.factory.ConstructionStrategies$ByConstructor.create(ConstructionStrategies.java:245)
at org.dozer.factory.DestBeanCreator.create(DestBeanCreator.java:65)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:477)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:434)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:330)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:276)
at org.dozer.MappingProcessor.map(MappingProcessor.java:245)
at org.dozer.MappingProcessor.processSuperTypeMapping(MappingProcessor.java:999)
at org.dozer.MappingProcessor.map(MappingProcessor.java:234)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:483)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:434)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:330)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:276)
at org.dozer.MappingProcessor.map(MappingProcessor.java:245)
at org.dozer.MappingProcessor.processSuperTypeMapping(MappingProcessor.java:999)
at org.dozer.MappingProcessor.map(MappingProcessor.java:234)
at org.dozer.MappingProcessor.map(MappingProcessor.java:187)
at org.dozer.MappingProcessor.map(MappingProcessor.java:124)
at org.dozer.MappingProcessor.map(MappingProcessor.java:119)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111)

我不明白为什么dozer要在org.hibernate.internal.SessionImpl类上抛出异常。如果需要更多的细节,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 14:40:04

您的OrderVO可能引用了EntityManagerSession,Dozer试图在映射实体时实例化该接口的实现。我不知道您想在这里使用什么样的映射,但我认为这是持续实体观的完美用例。

我创建了这个库,以便于在JPA模型和自定义接口或抽象类定义的模型之间进行映射,类似于类固醇上的Spring数据投影。其思想是按照您喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(Getters)映射到实体模型。

用于用例的DTO模型可能类似于以下具有熊熊持久性实体-视图的模型:

代码语言:javascript
运行
复制
@EntityView(Order.class)
public interface OrderVO {
    @IdMapping
    Long getId();
    @Mapping("customer.name")
    String getCustomerName();
    Set<OrderPositionVO> getPosition();

    @EntityView(OrderPosition.class)
    interface OrderPositionVO {
        @IdMapping
        Long getId();
        @Mapping("item.name")
        String getItemName();
        BigDecimal getAmount();
    }
}

查询是将实体视图应用于查询的问题,最简单的就是按id查询。

OrderVO a = entityViewManager.find(entityManager, OrderVO.class, id);

Spring数据集成允许您像Spring数据投影一样使用它:US/index.html#spring-data-功能

代码语言:javascript
运行
复制
Page<OrderVO> findAll(Pageable pageable);

最棒的是,它只获取实际需要的状态!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73234897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档