CrudRepository findById返回null mysql

时间:2017-05-23 09:01:34

标签: java mysql spring hibernate

我有一个Databaseintem,我有一个字符串。我创建了一个ItemRepository并声明了findById,该条目在数据库中,但我在findById上得到null。

import org.springframework.data.repository.CrudRepository; import 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,get。

ItemController:

   @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();
   }

输入DB&#34;

| 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
  • item在findById上为null

1 个答案:

答案 0 :(得分:0)

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

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