JPA规范包含对这些 *** 作的语义的非常精确的描述,比javadoc中的描述更好:
应用于实体X 的persist *** 作的语义如下:
如果X是新实体,则它将成为托管实体。实体X将在事务提交之时或之前或作为刷新 *** 作的结果输入数据库中。
如果X是预先存在的管理实体,则persist *** 作将忽略它。但是,如果从X到这些其他实体的关系用
cascade=PERSIST或
cascade=ALL标注元素值标注或用等效的XML描述符元素指定,则持久 *** 作将级联到X引用的实体 。
如果X是已删除的实体,则它将被管理。
如果X是一个分离的对象,则
EntityExistsException当
persist*** 作被调用时,或者可能抛出
EntityExistsException或另一个
PersistenceException可在冲洗被抛出或提交时间。
对于由X的关系引用的所有实体Y,如果与Y的关系已用级联元素值cascade=PERSIST或注释 cascade=ALL,则将持久 *** 作应用于Y。
应用于实体X 的合并 *** 作的语义如下:
如果X是一个分离的实体,则将X的状态复制到具有相同标识的预先存在的管理实体实例X’上,或者创建X的新的管理副本X’。
如果X是新的实体实例,则创建新的管理实体实例X’,并将X的状态复制到新的管理实体实例X’中。
如果X是已删除的实体实例,
IllegalArgumentException则合并 *** 作将抛出an (否则事务提交将失败)。
如果X是受管实体,则合并 *** 作将忽略它,但是,如果已用级联元素值
cascade=MERGE
或 cascade=ALL注释对这些关系进行了注释,则合并 *** 作将级联到X中的关系所引用的实体。对于由来自具有级联元素值
cascade=MERGE
或的X的关系引用的所有实体Y cascade=ALL,将Y递归合并为Y’。对于X引用的所有此类Y,将X’设置为引用Y’。(请注意,如果管理X,则X与X’是同一对象。)如果X是合并到X’的实体,并引用了另一个实体Y(其中未指定
cascade=MERGE
或未cascade=ALL指定),则从X’导航相同的关联会生成对具有与Y相同的持久标识的托管对象Y’的引用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)