简单的多对一单向关联,常规操作:
多方维护关系,先save一方,再save多方。产生2条insert语句。
如果先save多方,再save一方,会产生2条insert语句和一update条语句。
如果只save多方,不save一方,就commit,会抛出异常,参考了未保存的瞬时对象。
应用中尽量只用这种简单的多对一单向关联,和数据库的操作一致。
简单的双向一对多关联,常规操作:
多方维护关系,不维护集合,先save一方,再save多方。产生2条insert语句。
如果再在一方的集合属性中add,会产生update语句。
如果没有先save多方,就save一方,会抛出异常,参考了未保存的瞬时对象。
简单的多对多关联,常规操作:
固定某一个多方维护关系。
如果2个多方都维护关系,会造成重复的插入记录异常。
一般情况集合用Set,对Set接口编程。
缺省不做任何的cascade。
双向一对多关联,一般在再一端设置inverse="true",这样一端就放弃了关系维护,修改集合属性不造成update,只由多方维护。
视频27
save()方法并不立即访问数据库,会延迟到commit()或者flush()执行时。
多方维护关系,先save一方,再save多方。产生2条insert语句。
如果先save多方,再save一方,会产生2条insert语句和一update条语句。
如果只save多方,不save一方,就commit,会抛出异常,参考了未保存的瞬时对象。
应用中尽量只用这种简单的多对一单向关联,和数据库的操作一致。
简单的双向一对多关联,常规操作:
多方维护关系,不维护集合,先save一方,再save多方。产生2条insert语句。
如果再在一方的集合属性中add,会产生update语句。
如果没有先save多方,就save一方,会抛出异常,参考了未保存的瞬时对象。
简单的多对多关联,常规操作:
固定某一个多方维护关系。
如果2个多方都维护关系,会造成重复的插入记录异常。
一般情况集合用Set,对Set接口编程。
缺省不做任何的cascade。
双向一对多关联,一般在再一端设置inverse="true",这样一端就放弃了关系维护,修改集合属性不造成update,只由多方维护。
视频27
save()方法并不立即访问数据库,会延迟到commit()或者flush()执行时。