小编sha*_*ley的帖子

将附加参数传递给 MapStruct 映射器

还没有弄清楚如何传递额外的参数或替代方案。

目前我正在映射订单和订单行。两个对象是不同的并且需要@mappings。示例我有一个 Order 和 OrderRequest 对象,两者都不同,需要 @Mappings 注释来映射值,与 OrderLines 相同。

我创建了以下映射器

  • OrderMapper(使用 = OrderLineMappers.class)
  • OrderLineMappers(使用 = OrderLineMapper.class)
  • 订单行映射器

所以我的问题是 OrderLine 需要来自 Order 对象的 OrderId。然而,在 OrderLineMapper 中,它传递的是 OrderLine 而不是 Order。如何将 OrderId 发送到 OrderLineMapper?目前,我让 OrderMapper 执行 @AfterMapper,循环遍历 orderLines 并填充 OrderId。

任何帮助都会很棒。

类 订单映射器

@Mapper(componentModel = "spring",  uses = {OrderLineMappers.class})
public abstract class OrderMapper {

@AfterMapping
protected void orderRequestFromOrder( Order order, @MappingTarget 
OrderRequest orderRequest ) {

    //Wanting to do this at the OrderLineMapper class and not here
    String orderId = order.getId();
    List<OrderLineRequest> lines …
Run Code Online (Sandbox Code Playgroud)

java mapping mapstruct

10
推荐指数
1
解决办法
2万
查看次数

将整个 where 子句传递给本机 spring jpa @Query

目前,在我的 spring @Query 中创建本机 SQL 时,我无法知道 SQL where 子句中的字段(认为是临时的)。因此我传递了整个 where 子句。

如果我将 SQL 输出到控制台并将其粘贴到我的 SQL 编辑器中,我就能够收到有效的结果集。

SELECT * FROM lorder WHERE order_id = 1196077
Run Code Online (Sandbox Code Playgroud)

控制台的最后一个 SQL 输出是:Hibernate:

/* dynamic native SQL query */ SELECT
    * 
FROM
    lorder 
WHERE
    ?
and the where clause value being passed in to the @query is:
order_id = 1196077
Run Code Online (Sandbox Code Playgroud)

这就是我目前正在做的事情,但不起作用。

@Query(
    value = "SELECT * FROM lorder WHERE :where",
    nativeQuery = true)
List<OrderEntity> listSelected(@Param("where") String where);  
Run Code Online (Sandbox Code Playgroud)

不确定是否可以传递整个 where 子句,但我期待一个列表。然而我目前得到的是一个空的集合。

java spring-data-jpa

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

mapping ×1

mapstruct ×1

spring-data-jpa ×1