首页 > 解决方案 > 解析 findBy 中的嵌套对象属性

问题描述

我有一个实体 Items,它与另一个实体 ExceptionType 上的字段具有 ManyToOne 关系。我想根据银行编号(来自 Items 实体)和 itemExceptionType(来自 ExceptionType 实体)返回一个项目列表。我正在使用 Gradle。

我不断收到此错误:没有为类型项目找到属性异常类型!数据库是大型机上的 DB2。

我只能按银行号码搜索,这会返回一个项目列表。当我尝试将异常类型添加到查询中时,会返回一个空列表——即使所有项目都具有异常类型。

问题似乎是对 Items 的 ExceptionType 对象的解析。我已将查询简化为仅 findBy 异常号,但仍然出现错误。我尝试了在 findBy 中使用 _ 的各种组合,但没有成功(例如 findBy_ExceptionTypeExceptionNumber、findByExceptionType_ExceptionNumber 等)。它们都返回相同的错误。

当我使用 _ExceptionType 时,我真的得到:No property _ExceptionType found for type Items!
所以无论有没有 _ 它都无法解析嵌套的对象/属性

@Entity
@Data
public class Items {

  @Id
  private String itemKey;

  private String bankNbr;

  private BigDecimal itemAmount;

  private String itemPosPayInd;

  @ManyToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "ITEM_EXCEPTION_TYPE", insertable = false, updatable = false)
  private ExceptionType itemExceptionType;


@Entity
@Data
public class ExceptionType {

private String exceptionTypeValue;

@Id
private String exceptionNumber;


public class AdHocController {
@Autowired
AdHocService adHocService;


@GetMapping(value = "/adhoc-bank-exception/")
@ResponseBody
public ResponseEntity<List<Items>> getAdHocItemsByBankException(@RequestParam String bankNbr, @RequestParam (required = false) ExceptionType itemExceptionType) {

    List<Items> itemsList = adHocService.getAdHocItemsByBankException(bankNbr, itemExceptionType);
    log.debug("Getting getAdHocItemsByBankException");
    return new ResponseEntity<>(itemsList, HttpStatus.OK);
}


@Service
public class AdHocService {

@Autowired
private AdHocRepository adHocRepository;


public List<Items> getAdHocItemsByBankException(String bankNbr, ExceptionType itemExceptionType) {
    return adHocRepository.findBy_ExceptionTypeExceptionNumber(itemExceptionType);

}

@Repository
public interface AdHocRepository extends CrudRepository<Items, Long> {


List<Items> findBy_ExceptionTypeExceptionNumber(ExceptionType exceptionNumber);

我需要它返回所有包含提供的异常编号的项目列表。但是,我收到属性引用错误。

标签: javaspring-boot

解决方案


据我所知,您正在使用 Spring Data。我建议如下:

让您的AdHocRepository界面扩展JpaRepository并将您的自定义 repo 方法的签名更改为以下内容。

@Repository
public interface AdHocRepository extends JpaRepository<Items, Long> {

    List<Items> findByItemExceptionTypeExceptionNumber(String exceptionTypeNumber);
}

注意自定义 repo 方法的命名:

findBy<NameOfEntityProperty><NameOfNestedEntityProperty>(...)


推荐阅读