[hibernate备忘]

1、hibernate搭建在eclipse中最好的开发环境

2、hibernate的关联关系映射 基本原则是尽量一个表对应一个model ,继承的除外,特别是 用来进行多对多关联的表

     多对多 拆成2个一对多 代码要好写很多

http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html

 

(1)一对多

 

    /**
     * @hibernate.set lazy = "true" readonly = "true" cascade = "save-update" inverse = "true"
     * @hibernate.collection-key column = "c_role_id"
     * @hibernate.collection-one-to-many class ="com.rocky.project.model.relation.UserRoleR"
     */    
 
	/**
	 * @hibernate.many-to-one column = "c_resource_id" cascade="none"	 not-null = "true"
	 */

 

(2)一对一

	/**
	 * @hibernate.one-to-one property-ref = "user"   not-null="false"
	 */	
 

  (3)几种常用基本类型(不用原始类型)

 

	/**
	 * @hibernate.property column = "c_keyword" type = "string" 
	 *                 
	 * 
	 * @return creator
	 */
	public String getKeyword() {
		return keyword;
	}
 
	/**
	 * @hibernate.property column = "c_showindex" type = "integer" 
	 * 
	 * @return creator
	 */
 
	/**
	 * @hibernate.property column = "createtime" type = "java.util.Date"
	 *                   
	 * 
	 * @return the create time.
	 */

 

	/**
	 * @hibernate.property column = "isdeleted" type = "boolean" 
	 * @return boolean
	 */
 
	/**
	 * @hibernate.id column="id" unsaved-value="-1" generator-class="native"
	 *               type="java.lang.Long"
	 * 
	 * @return id
	 */
 
	/**
	 * @return Returns the description.
	 * @hibernate.property column="description" length="5000" type="string"
	 */

  3、many-to-one  one-to-many many-to-many one-to-one inverse casecade 重点掌握

       先掌握单向关联的配置再掌握双向关联的配置

 

 

 

hibernate中的inverse和casecade
hibernate中的inverse与cascade是个让人容易产生误解的属性,今天我终于有了正确的认识,总体上说inverse是指定哪个表作为维护端,cascade则是在操作某个表时,另一个表如何操作。以Father与Son为例,它们之间为一对多关系。
一、inverse属性
1、如果是单向一对多
   在set元素那里设置inverse为true,则插入father时(且调用father.setSons(sons),sons 是个set),son没有插入,如果设置inverse为false则插入father时(且调用father.setSons(sons),sons 是个set),则同时插入son。
2、如果是单向多对一
   此种配置没有inverse属性,设置cascade为合适值即可实现级联操作。可等价于一对多中的inverse=false
3、双向一对多(与双向多对一是一样的)
   set的inverse默认为false,当在一的一端的set中设置inverse为false时(many-to-one没有inverse属性,实际上就相当于many-to-one的"inverse"恒为false),调用session.save(),则将有2条update语句,实际上2条语句是一样的。此种设置方法是低效率的,因为执行来了2次实际上是一样的sql语句。通常将set中的inverse设置为true,这样当插入或更新时,只执行一次update语句。在双向一对多时,set的inverse设置为true,则须注意:通过father.setSons(sons)是无法保证son插入的,而通过son.setFather(father)可以保证father插入,因而在程序中最后同时设置father.setSons(sons),son.setFather(father).
二、cascade属性
	cascade表示某一端进行某种操作时,另一端的关联操作。cascade属性只有在inverse属性设置为false才有意义,因为inverse为true表示不维护关系,即外键为null,如果此时对某一端执行某种操作,hibernate无法找到相应的另一端,自然也就无法对另一端执行相应操作。
 

你可能感兴趣的:(eclipse,C++,c,Hibernate,C#)