HibernateOracle目录:自动到手配置一个hibernate环境表与表之间的关系1对1,多对1/1对多,多对多。--bag,list,set级联-cascade,inversHQL语句再说明-fromSomeClass关联查询条件查询-在关联查询与直接将数据封装成map,JavaBean或是直接返回object[].使用定义的SqL-在xml中定义。使用原生的sql。表与表之间的关系1对1.-一个表的主键对应另一个表的主键。1对多,多对1.-一个表的主键对应另一个表的外键。多对多。-使用第三方表完成多对多。1对多的最简单实现:-外表只有一个列—两个表一个bean一个项目可以拥有多张图片。/*最简单的set影射,一个项目有多张图片*/createtableitem(item_idintprimarykey,item_namevarchar(30));createtableimage(image_idint,image_namevarchar(30));1对多的最简单实现:-外表只有一个列实现具体操作:-保存:Sessionsess=HibernateUtils.getSession();sess.beginTransaction();Itemitem=newItem();item.setName("Rose");item.getImgs().add("第三张图片");item.getImgs().add("第四张图片");sess.save(item);sess.getTransaction().commit();1对多,多对1关联:一个人可以拥有多辆汽车。在Person方,使用set进行关联://--以下是多方:在Car方为many-to-one
//指定本类所对应的表中的外键字段名--将此值修改成false或是直接删除此配置项目-后面讲多方,即明细方的外键字段名//在person方为one-to-many代码:修改配置文件如下:-直接使用级联保存:inverse:是否要放弃维护表之间的关系。false是不放弃,即维护表之间的关系。级联和关系维护cascadecascade和和inverseinverse(Employee–Department)(Employee–Department)Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:none,all,save-update,delete,lock,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many)。一般对many-to-one,many-to-many不设置级联,在和中设置级联。inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。注:配置成one-to-one的对象不维护关联关系使用带关联的查询1:即可以从Person查询出他的所有汽车,也可以从某个car中获取它的主人信息。但这种方式可以通过设置lazy=true|false的方式来加以限制。任何方便的操作,都是以消耗性能为代价的。从一个对象中获取关系的另一方信息使用带关联的查询2:查询拥有车号为888的车主查询谁拥有什么车使用带关联的查询3:-将查询结果直接封装成Map:使用带关联的查询4:使用Criteira的createAlias方法以上代码返回的数据形式仍然为List类型。但如果某个Person拥有两部车,则会出现重复的Person使用带关联的查询5:-高级查询也可以使用以下查询,代替上面的查询:使用List关联另一方:再很多情况下,我们已经习惯使用List进行数据操作,这在Hibernate的只需要的简单的修改,即可以实现:-声明成List,并使用bag进行影射:具体操作略。动态模型(Dynamicmodels)运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的形式。Hibernate也支持动态模型(在运行期使用Map的Map)和象DOM4J的树模型那样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。动态模型组件的配置/查询:使用Map保存动态模型:1对1关系:1对1影射关系,一...