jpa native 映射对象_Column cannot be null引发的一则JPA小故事

最近,遇到mysql数据库报字段为空的错误。

java.sql.SQLIntegrityConstraintViolationException: Column 'create_time' cannot be null

虽然是mysql严格模式报错所致,真正要从Java层面去解决却也需要寻根溯源,才能药到病除。

最后发现,使用的Ebean库,只需要添加 @WithCreated注解就可以在创建时自动赋值。

8c3f7bbbe3c45318b1d232bf0f2cec71.png

喜欢Java是因为它的系统性。

一般很难把Java的所有特性发挥到炉火纯青,因为很多Java的框架和技法难免显得臃肿而累赘。简单地说,就是太繁琐,开发效率低。

但是很喜欢研究Java的一些技法,开发一些不是频繁变动的程序时,也会倾向于Java。各种类库信手拈来,快速拼装,不必担心稳定性和性能问题,靠谱。

凡是系统性的东西,都有一种美,能提升审美能力。审美能力不一定时刻有用,却能与不自觉中化腐朽为神奇。

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。它一改之前 EJB 2.x 中实体 Bean 笨重且难以使用的形象,充分吸收了在开源社区已经相对成熟的 ORM 思想。

对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

简单来说,开发者可以把一行数据库数据看成一个对象。SQL的操作转变成对象操作。

Select语句演变成从数据库中提取符合条件的对象。

Insert语句演变成创建对象(new),然后保存(Save)。

Update语句演变成对对象的修改,然后保持(Save)。

Delete语句演变成查找符合条件的对象并删除(Delete)。

通过ORM或者sql的方式,对数据库进行操作的过程和接口,在Java中也常常被封装为DAO类(Data Access Object)。DAO和MVC等概念类似,更像是一种开发思想和编程规范。

JPA可以认为是Java官方对ORM思想制定的标准规范,包含ORM的一些规定,以及相关增删改查(CRUD)的一些接口规范规定。它由官方伴随EJB引入。但很多其他Java数据框架也针对JPA标准规范做了适配或者优化。比较知名的比如Hibernate、Ebean。

当然ORM由于使用面向对象封装,在单表CRUD的时候非常方便,但是对于多表处理和一些复杂一点的数据库操作,往往就显得无能和低效。

相比其他一些Java操作方法,JPA的语法还是非常轻巧的。JPA通过 @Entity 、@Id等注解就实现了对象映射的修饰,不需要增加复杂的代码。

这也充分显示Java生态的复杂性。喜欢复杂方式和轻便方式的都有人在。

Java的很多概念和框架设计都追求一种架构美,令人着迷。

个人在实践中受限于时间和精力,往往只能追求快速效果,对很多东西都简单化理解,有亵渎美好之嫌。这可能也是一种架构学习方法吧。先实践,再总结。发现疑惑或矛盾时,再去寻找正解。

参考:

https://www.cnblogs.com/zhujiabin/p/5861319.html

https://www.cnblogs.com/xuwenjin/p/8830850.html

https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值