Java Crudepository findById返回空mysql

Java Crudepository findById返回空mysql,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我有一个数据库,我有一个字符串作为Id。我创建了一个ItemRepository并声明了findById,条目在数据库中,但findById上为null 导入org.springframework.data.repository.crudepository; 导入org.springframework.transaction.annotation.Transactional 存储库: @Transactional public interface ItemRepository extends

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

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

存储库:

@Transactional 
public interface ItemRepository extends CrudRepository<Item, String> {
    public Item findById(String id);
}
我有一个与存储库交互的ItemService,我从ItemController实现了一个RESTAPI get

项目控制器:

   @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();
   }
数据库中的条目“

请求获取:

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

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


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

并且您的id按照logger.info的预期打印。我想?顺便说一下@PathVariable name不应该是“assessment\u id”吗?
@PathVariable
给定的字符串“id”不应该是“assessment\u id”吗"? 看看@Zeromus很快你有一个项目对象的存储库,这与评估对象有什么关系?对不起,是项目对象,我已经更新了!删除
findById
方法并使用默认的
findOne
方法(假设您的
id
字段用
@id
注释)。
| token1495528421393 | 2017-05-23 11:33:41 | Itemnull |               0 |        |          0 |          0 | 2017-05-23 11:33:41 |Item1
curl -H "Content-Type: application/json" -X GET http://localhost:8090/item/token1495528421393