从第四章开始:
@PesistenceUnit(unitName="")注入的为实体管理工厂
@PersistenceContext(unitName="")注入的为实体管理器
@Entity注解标注这个类为实体类。
@Table(name=“”)可以指定映射到数据库中表名称
@Id标注为主键
@Transient标注这个属性不被映射到数据库中
@Colum(name=“”)可以指定映射到数据库中的列名称。
@Basic(fetch=Fetch.LAZY)这个字段使用在属性上,可以延迟加载该属性,目前没模拟出来,所有 属性都查询了。
@Lob标注这个属性为大型对象(clob或者blob)
@Temporal()枚举常用TemporalType.TIMESTAMP 表示持久化格式yyyy-MM-dd HH:mm:ss
映射主键
@Id
@GeneratedValue(strategy=GeneratedType.Auto)自动生成主键
我之前犯了一个错误,在之前没用主键生成策略的时候建表直接用的@Id映射,数据库用的mysql,也就是主键没自增,
然后你再加上自动生成主键策略,插入的时候当没给id赋值的时候,会报错的。记得用建表策略create,重新建表,再换成update或者直接主键设置自增。
@Id
@GeneratedValue(generator = “”)自己指定生成器,
@GenericGenerator(name=""和上面的generator = “”值一样,strategy="uuid")由hibernate提供这个注解
关系
@ManyToOne
@JoinColum(name="")多对一关系,name的值表示在多方映射到数据库中的外键名称,这个注解出现在多对一关系中的所有方上。
@OneToOne(mappedBy="")双向一对一,mappedBy应该在没有定义@JoinColum的实体的@OneToOne注解中指定,或者在关系的反方中指定。
当定义双向多对一或者双向一对多的时候,多对一方是关系所有方,在所有方定义@JoinColum,一对多是反方使用mapperBy=“”
如,多方为员工,一方为部门,当为双向关系时,多方即员工来维护关系,在多方使用@ManyToOne,同时指定@JoinColum的值,在一方使用OneToMoney(mappedBy="").
当定义一个单向的OneToMoney的时候,如一个员工有多个手机号。在单向这么没有使用mappedBy,那么就需要一个联接表来关联员工和手机号,员工为一方
@JoinTable(name=""联接表名,joinColums=@JoinColum(name=""一方外键),inverseJoinColums=@JoinColum=(name=""多方外键))
@ManyToMany,如人和工程
需要人为的指定某个many为关系维护方,如指定人为维护方,那么在工程方就需要使用@ManyToMany(mappedBy="")
需要使用第三方表来维护多对多的关系
@JoinTable(name=""联接表名,joinColums=@JoinColum(name=""维护方外键名称),inverseJoinColums=@JoinColum=(name=""对方外键名称))
@Embedded表示为嵌入对象,如人这个实体,字段有id,name,同时人也有个属性为住址对象(人的嵌入对象),实际就是把住址的字段加在人上。如果 字段与重复请使用
@AttributeOverride注解重写。