美文网首页
Spring Boot 创建实体

Spring Boot 创建实体

作者: 星期六1111 | 来源:发表于2017-10-11 00:52 被阅读327次

    问题描述

    数据库中已经存在了表,现在需要读取表中的数据,用Spring Boot 中Spring-data-jpa的方式,我创建了实体,但报了错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigu

    矛盾点

    根据错误提示判断出应该是创建实体的某个关键注解使用不当,但一时找不出是哪个注解

    问题解决

    Q1:由于配置了hibernate.hbm2ddl.auto,在应用启动的时候框架会自动去数据库中找到(无则创建)对应的表,想想创建一个实体时常用的注解和作用
    A1:

    • @Entity:说明这个class是实体类,并且使用默认的规则,即class名即数据库表中表名,class字段名即表中的字段名
    • @Table(name=”“):指定了Entity所要映射带数据库表
      注意:一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
      ok,这是两个最重要的注解,没有问题的。
      @Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,这个是可以省略的,但是我有
      @Id:表示表的之间
      等等。。。

    Q2:我的数据库表中主键是什么?看下创建表的时候的SQL语句,userId是主键,所以我的问题就是忘了这个注解。为什么缺少主键会报这个错误?
    A2:个人的理解是这样,jpa 有很多原生的api,如findOne(),需要传入的参数就是主键id,所以当缺少这个直接的时候,框架就找不到主键是哪个,代码中使用了这个api也就有问题了。。。。加上后就ok 了

    反思

    为什么刚开始的时候,没有一眼发现这个问题,是因为之前的写的代码中主键都是id表示,这次换成了userId的时候一时没反应过来它就是主键,说明对@id这个主键的理解不深刻,对之前自己写的代码也没有完全理解透彻。

    action

    • 不要放过自己犯下的任何错误,每一个不理解的点要追问根由写博客来记录
    • 切记: 接口中不能一次获取全部的数据(getAll,慎用。。。)

    相关文章

      网友评论

          本文标题:Spring Boot 创建实体

          本文链接:https://www.haomeiwen.com/subject/ndciyxtx.html