@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。
Consider a for loop here.
OrderVO orderVO = this.dozerMapper.map(order, OrderVO.class);
出现以下错误:
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类上抛出异常。如果需要更多的细节,请告诉我。
发布于 2022-08-05 14:40:04
您的OrderVO
可能引用了EntityManager
或Session
,Dozer试图在映射实体时实例化该接口的实现。我不知道您想在这里使用什么样的映射,但我认为这是持续实体观的完美用例。
我创建了这个库,以便于在JPA模型和自定义接口或抽象类定义的模型之间进行映射,类似于类固醇上的Spring数据投影。其思想是按照您喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(Getters)映射到实体模型。
用于用例的DTO模型可能类似于以下具有熊熊持久性实体-视图的模型:
@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-功能
Page<OrderVO> findAll(Pageable pageable);
最棒的是,它只获取实际需要的状态!
https://stackoverflow.com/questions/73234897
复制相似问题