JPA命令
@entity实体bean
@id(@generatedvalue(starategy=generatedtype=auto根据使用的数据库方言决定生成策略可以省略/idenity根据数据库id自增长方式生成主键值/sequence序列/table采用表生成主键值策略/))唯一标示符可以标注在方法上还可以标注在属性的get方法上。
@column(length=10,nullable=false,name=“persionname”)设置数据库中的属性长度和能否为空和数据库中的名字是persionname。
@table(name=“xxx”)写在类上面该数据库的名字
@temporal(temporalttype.data)设置存贮时间格式,写在属性的get方法上
*关于枚举使用的注解
@enumerated(enumtype.string)写在get方法上面以字符串的形式保存。
*处理大文本的注解
@lob用于标注大的文本或数组。
*让属性在数据库中显示也就是不做持久化
@transient
*是否加载类属性的所有相关内容到内存。
@basic(fetch=fetchtype.eager(立刻加载)/lazy(延迟加载)),不想加载那个属性的相关内容就在那个属性的get方法上写注释。
jpa关系
双向关系中
*一对多中多的一方为关系维护端(外键维护端),关系维护端负责外间记录的更新,关系被维护维护端是没有权利更新外键记录,关系被维护端通过mappedby来标注。
1.一对多再多的一端用@onetomany(cascade={cascadetype.refresh(级联刷新)cascadetype.persist(级联保存,调用prisist方法是才起作用),cascadetype.merge(级联更新,调用此方法时必须调用merge方法),cascadetype.remove(级联删除,只有调用remove方法时才会起作用)},fetch=fetchtype.lazy(延迟加载,不写此属性默认是延迟加载,只要是要得到多(many)的一方的时候默认均是延迟加载),只要是一的一方(one)默认就是立即加载,mappedby=“order(此处写明是由那个属性来维护被维护端)”),在一的一端用@manytoone(cascade={cascadetype.merge,cascadetype.refresh},optional=false)
@joincolumn(name="order_id")建外键的标示
*双向关系中的一对一
谁是维护端自己决定
注释用@onetoone(mappedby="idcard"(指的是被维护端),optional=false(是否有省份正就得有这个人的意思))
*双向关系中的多对多
双向关系中的多对多是对等的关系,选谁为维护端由自己决定,多对多中有关联表注释用@jointable(name="student_teacher",inversejoincolumns=@joincolumn(name=“teacher_id”)指的是关系表中被维护端(teacher)的外键与主键关系,joincolumn指的是关系表中维护端(student)与主键的关系)
*联合主键
@embeddable是用来告诉jpa本类离得属性是用在实体bean中的
@embededid用于表示此属性为实体的标示符
实用联合主键必须遵守一下要求:
1.提供无参构造方法
2.实现序列化接口
3.必须重写所有方法