Spring data jpa Entity实体类命名规范

  • 代码布局

使用Spring Data Jpa 框架操作MySql数据库时,写了一个Blog实体类,属性如下:

@Entity
public class Blog {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;
    private String title;
    private String content;
    @Temporal(TemporalType.DATE) // date (只有日期)
    private Date createTime;
}

一个操作数据MySql数据库的接口:

public interface BlogService extends PagingAndSortingRepository<Blog, Long> {
    Page<Blog> findAll(Pageable pageable);
    List<Blog> findAll();
    Blog findOne(Long id);
}

调用findAll()方法:

List<Blog> blogs = blogService.findAll();
  • 数据库表

101743_xVxe_3382918.png 

  • 执行结果

执行findAll()方法时发生异常:Unknown column 'blog0_.create_time' in 'field list'

查看了一下Hibernate生成的执行语句:

select blog0_.id as id1_0_, blog0_.content as content2_0_, blog0_.create_time as create_t3_0_, blog0_.title as title4_0_ from blog blog0

原来,我的createTime自动被转换成了create_time字段,即使在createTime字段上加上Column,name属性设置成createTime还是出现同样的错误。

由此推断,Hibernate在生成字段时,会将单词中间大写字母变成小写,并且中间加上下划线。

代码改成如下就没有问题了:

@Entity
public class Blog {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;
    private String title;
    private String content;
    @Temporal(TemporalType.DATE) // date (只有日期)
    @Column()
    private Date createtime;
}

或者将数据库的createTime字段改成create_time字段,也能解决问题。

转载于:https://my.oschina.net/u/3382918/blog/867817

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值