pro JPA2 精通java持久化API 第四章

来源:互联网 发布:安卓手机plc编程软件 编辑:程序博客网 时间:2024/06/01 08:10

从第四章开始:

@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注解重写。