【问题标题】:CrudRepository findById returns null mysqlCrudRepository findById 返回 null mysql
【发布时间】:2017-05-23 09:01:33
【问题描述】:

我有一个 Databaseintem,我有一个字符串作为 Id。我创建了一个 ItemRepository 并声明了 findById,该条目在数据库中,但 findById 为空。

导入 org.springframework.data.repository.CrudRepository; 导入 org.springframework.transaction.annotation.Transactional;

存储库:

@Transactional 
public interface ItemRepository extends CrudRepository<Item, String> {
    public Item findById(String id);
}

项目:

@Entity
public class Item{
    private String id;
    private String idTrans;
    private String name;
    private Date created;
    private Date modified;

@Id
public String getId() {
    return id;
}
----

我有一个与存储库交互的 ItemService,我从 ItemController 实现了一个 rest api,获取。

项目控制器:

   @Controller
   @RequestMapping(value = "/item")
   public class ItemController {

   @RequestMapping( value = "/{id}", method = RequestMethod.GET )
   @ResponseStatus( HttpStatus.OK )
   @ResponseBody
   public String getItem( @PathVariable( "id" ) String id){
      Preconditions.checkNotNull( id );
      logger.info("1. getAAA " + id); // prints
      Item a = itemService.getItem( id );
      logger.info("2. getAAA " + a);
      return "a : ";// + a.getName();
   }

数据库中的条目"

| token1495528421393 | 2017-05-23 11:33:41 | Itemnull |               0 |        |          0 |          0 | 2017-05-23 11:33:41 |Item1

请求 GET:

curl -H "Content-Type: application/json" -X GET http://localhost:8090/item/token1495528421393
  • 在 findById 上的项目为空

【问题讨论】:

  • 我想你的 id 是按 logger.info 的预期打印的?顺便说一句,@PathVariable 名称不应该是“assessment_id”吗?
  • 给定字符串“id”的@PathVariable不应该是“assessment_id”吗?看看Spring MVC ... @Zeromus 更快
  • 你有一个 Item 对象的存储库,它与 Assessment 对象有什么关系?
  • 对不起,是 Item 对象,我已经更新了!
  • 去掉findById方法,使用默认的findOne方法(假设你的id字段被@Id注解)。

标签: java mysql spring hibernate


【解决方案1】:

几天前我刚刚在同一个问题上运行过,然后我发现发生这种情况的原因是我正在检索的实体有一个对另一个实体的外部引用,此后又有另一个外部实体对第三个实体的引用,而这些 [references] 中的后者被配置为 not null,但问题是在检查数据库时,所查找的项目实际上在外键中有一个 null 值;因此,当持久性框架将服务转换为查询时,它进行的是内部联接而不是外部联接,这会从结果中删除实体,因为第二个和第三个实体之间的联接由于空值而失败。 删除第二个实体中的 not null 子句有助于解决问题。

请检查您的实体是否未以类似方式映射。

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2021-12-13
    • 2019-02-08
    • 1970-01-01
    • 2019-03-14
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多