You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JUnit5 问题:实体已创建却无法通过自定义方法检索

问题排查与解决

1. 查询方法命名不符合Spring Data JPA规则

你定义的findCreateGameByPublisherId方法命名存在问题,Spring Data JPA的查询方法命名有固定规则:前缀(find/get/read)+ 条件(By+字段名),中间的CreateGame属于多余的干扰词,Spring Data无法正确解析该方法对应的查询逻辑,导致生成的SQL不符合预期,自然查不到数据。

解决办法:将方法名修改为符合规则的格式,例如:

Game findByPublisherId(String publisherId);

2. 测试场景下的事务提交问题

如果你的测试类未配置事务,尽管Spring Data JPA的save方法默认会立即执行插入操作,但部分内存数据库(如H2)在测试环境中可能需要显式提交事务,才能查询到新插入的数据。

解决办法:
在测试方法上添加@Transactional和@Commit注解,确保事务提交:

@DisplayName("Test for createGame")
@Test
@Transactional
@Commit
public void createGameTest(){
    // 你的测试代码逻辑
}

3. 实体主键与映射配置问题

检查Game实体类的配置:

  • 主键字段是否添加了@Id注解?你继承的是JpaRepository<Game, String>,主键类型为String,需要确保实体中对应的字段(比如gameDataId)标记了@Id注解。
  • publisherId字段是否正确映射到数据库表的对应列?虽然Spring Data默认会自动将驼峰命名转为下划线列名,但仍需确认实体字段与数据库列名无匹配错误。

示例正确的实体配置:

@Entity
public class Game {
    @Id
    private String gameDataId;
    private String publisherId;
    private String name;
    private Long timePlayed;
    
    // 省略getter、setter及构造方法
}

内容的提问来源于stack exchange,提问作者dcm50

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:09:55