摘要:本文主要讲解在使用JPA过程中,常见的一些问题和注意事项。
本文主要讲解在使用JPA过程中,常见的一些问题。
1.配置文件
在上一篇中,我们在配置文件中配置jpa时,有如下配置信息:
这里ddl-auto有四种状态:
create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据
model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
我们需要注意一下,选择合适的类型去配置,不然项目重启后,发现表中数据没了还不知道为什么。
2.注解
注解,我们主要注意实体类上的注解:
@Table(name = "user") 为建表的表名
@Entity 标明为实体类
@Id 主键上一定要有这个标识,不然会出错的
@Transient Entity中不映射成列的字段得加
@GeneratedValue(strategy = GenerationType.IDENTITY) 主键生成策略
这是主键的生成策略,四种方式:
JPA提供的四种标准用法为:TABLE,SEQUENCE,IDENTITY,AUTO。
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
3.报错信息
3.1 SSL连接安全错误
此错误需要修改spring.datasource.url的值
修改为
3.2 主键错误
此错误,在实体的主键上添加@Id注解即可。
3.3 乱码问题
如果从数据库查询的数据是乱码,或者插入的数据是乱码,我们在数据库连接上指定一下编码即可;也有可能,是你的数据库编码有问题,两边要对应一下。
3.4 事务错误
在删除的时候,可能会出现事务错误:
我们在持久层上添加上 @Transactional 注解即可。
与其相忘江湖,不如点赞关注
本文为java4all(公众号:java4all)原创
欢迎转载,请注明出处或文末给出二维码
谢谢!
领取专属 10元无门槛券
私享最新 技术干货