hibernate 级联操作

@Column

privateIntegerclassNum;

//cascade表示级联操作

//CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法

//CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据

//CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法

//CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法

//FetchType.LAZY表示懒加载。对于xxxtoMany时即获得多的一方fetch的默认值是FetchType.LAZY懒加载。对于xxxtoOne时即获得一的一方fetch的默认值是FetchType.EAGER立即加载

//mappedBy="classes"就相当于inverse=true,(mappedBy指定的是不需要维护关系的一端)

//请检查orderItems这个属性是否使用了泛型,如:Set<Student>.

//如果未使用泛型,请在OneToMany注释中使用targetEntity指定元素的类型

@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,targetEntity=Student.class,mappedBy="classes")

privateSetstudents=newLinkedHashSet();

@OneToOne

@OneToOne注释指明Person与IDCard为一对一关系,@OneToOne注释五个属性:targetEntity、cascade、fetch、optional和mappedBy,fetch属性默认值是FetchType.EAGER。optional=true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER和FetchType.LAZY。FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。@OrderBy(value="idASC")注释指明加载元组时按id的升序排序(降序"DESC")@OneToOne(optional=true,cascade=CascadeType.ALL,mappedBy="person")

相关推荐