Springboot整合hibernate和hibernate的注解的解释

https://blog.****.net/u014745069/article/details/79940540
整合的地址,非常详细

注解
@Id 和 @GeneratedValue

@Id:
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
@Id标注也可置于属性的getter方法之前。

@GeneratedValue:
@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

@Column注解
用来标识实体类中属性与数据表中字段的对应关系
name
定义了被标注字段在数据库表中所对应字段的名称;

unique
表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。

nullable
表示该字段是否可以为null值,默认为true。

insertable
表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。

updatable
表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。

columnDefinition(大多数情况,几乎不用)
表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

table
表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。

length
表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

precision和scale
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

@MappedSuperclass 注解的使用

@table注解详解
[email protected]和@entity注解的区别
@entity当实体类名和表名相同,实体属性和表字段相同时,会默认完成实体属性和表字段的映射,当表名和实体类名不同,表字段和实体属性不同时,需要使用@table和@column注解完成实体和表直接的映射

[email protected]注解默认的情况下只会完成表和实体之间的映射,但是当在application,yml文件中填加了配置之后就会创建表并完成映射
3.application.yml的配置
Springboot整合hibernate和hibernate的注解的解释
jpa:
hibernate:
ddl-auto 的几个常用属性值:
none:默认值,什么都不做,每次启动项目,不会对数据库进行任何验证和操作
create:每次运行项目,没有表会新建表,如果表内有数据会被清空
create-drop:每次程序结束的时候会清空表
update:每次运行程序,没有表会新建表,但是表内有数据不会被清空,只会更新表结构。
validate:运行程序会校验数据与数据库的字段类型是否相同,不同会报错
实际项目中 update 用的多一点,因为它只更新对象关系的变化,不会清空数据或者重建表。

需要注意的是,如果你不打算在设计表的时候强制加表级别的外键关系约束,就自己手动建表,然后不设置 jpa.hibernate.ddl-auto 或者设置它的值为 none。

因为使用 update 更新表,每次启动 @OneToOne、@OneToMany 等注解会检查表的外键关系,然后强制建立表外键约束,这个很烦人。