java - 解析 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);
我需要它返回所有包含提供的异常编号的项目列表。但是,我收到属性引用错误。
解决方案
据我所知,您正在使用 Spring Data。我建议如下:
让您的AdHocRepository
界面扩展JpaRepository
并将您的自定义 repo 方法的签名更改为以下内容。
@Repository
public interface AdHocRepository extends JpaRepository<Items, Long> {
List<Items> findByItemExceptionTypeExceptionNumber(String exceptionTypeNumber);
}
注意自定义 repo 方法的命名:
findBy<NameOfEntityProperty><NameOfNestedEntityProperty>(...)
推荐阅读
- c++ - CMake混淆:包括两个子目录并从另一个子目录中调用一个
- json - 高级 JQ 技术
- django - 当我在 django 中更新我的个人资料模型中的其他字段时,如何保留我的 `profile_pic`?
- .net - 即使在设置 Env Path 后也找不到 MSBuild 命令
- python - 如何设置正确的网址?(姜戈)
- javascript - 我在使用 React 和 ant-design Table 组件时遇到了一些令人困惑的行为
- python - 在 Python 中使用 List Comprehension 方法将嵌套字典转换为嵌套列表
- java - 如何在创建 gradle build 时传递 db 属性
- javascript - 空手道 UI 框架:必须运行 javascript 来存储 chrome 会话以启动网站
- numpy - 查找numpy数组中列最大值的索引但删除前一个最大值