学了hibernate有两个礼拜了,还是有点模糊,主要是映射文件不太明白那位大侠能给俺讲讲映射文件?
1.实体类一对一主键关联如何配置?
2.实体类一对一外键关联如何配置?
3.单向多对一关联如何配置?
4.双向多对一关联呢?
5.懒加载的意义?怎样实现,怎样取消?
多讲讲里面参数的意思,跪求。
1.实体类一对一主键关联如何配置?
2.实体类一对一外键关联如何配置?
3.单向多对一关联如何配置?
4.双向多对一关联呢?
5.懒加载的意义?怎样实现,怎样取消?
多讲讲里面参数的意思,跪求。
解决方案 »
- 这个是什么错?每天页面第一次打开出现,刷新一下就好
- 当你做一个批处理文件,假如命令中有要求用户输入的,我怎样预设值啊??比如:其中一条命令要求用户输入密码,我能否预设一个值啊
- 各位前辈,WEB环境下,我想在服务器的内存中有一个对象的实例,但不放在application作用域中,可行吗?
- Oracle 10G 级联查询问题
- 将页面保存为word文档后是韩文????
- 如何判断文本框中返回的是数字?
- 安装oracle9i后会自动安装apache并绑定http的8080,导致tomcat的http端口无法进去
- 怎样在Jbuilder2005中导出war文件
- 求救
- left join,right join,inner join在oracle上的莱鸟问题
- <a 的问题
- 为什么我的项目部署不上那????
http://www.bjsxt.com/load.asp?page=4
<hibernate-mapping>
<class name="com.bjsxt.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="group" column="groupid" cascade="all"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
两分钟就可以搞定,都是自动生成的东西,点点就好...话说Hibernate好像是ssha里最简单的东西,呵呵
1.实体类一对一主键关联如何配置?
2.实体类一对一外键关联如何配置?
3.单向多对一关联如何配置?
4.双向多对一关联呢?
这些不用你写都是自动生成的,而且很简单,都是在数据进行的操作,在Hibernate里印射时会把你在数据库里设置好的那些主外键关系全部自动写入文档里..
在印射成的类里,主外键关系也会自动配好
具体在数据库怎么操作,如果到明天晚上还没有答案,我会贴上来..一夜没睡了,睡一下,今天还有课呢..又是高效的脑力劳动啊,天天讲那么多知识...
除非我们学的不一样,反正我连ssha集成的项目都做了,一个Hibernae实现调用应该没问题...
基本原理都不懂 那谈什么应用啊 即使操作再简单 也只是会用而已
但要想想为什么要用这个 不用可不可以 而且我认为hibernate在ssh框架里是学习内容最多的
也是最重要的 要说最简单 呵呵 感觉struts简单些 但要掌握原理 还是要好好看看它的文档的
或源代码 很有帮助的
把基本的这些映射啊 hql啊 懒加载啊 等掌握差不多
也要学学它的提高性能的一些东西 比如什么缓存 抓取策略 等等呵呵 我自己也是在学习之中 我们一起努力吧
对映射文件讲解的都很详细吧
建议看看
讲下lazy
简单的说就是如果设置为false
立即发sql语句,查询出来结果
如果支持lazy,使用的时候再发sql语句
然后lazy可以使用在
* <class>标签上,可以取值:true/false(只对普通属性起作用)
* <property>标签上,可以取值:true/false需要类增强工具
* <set><list>标签上,可以取值:true/false/extra
* <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/noproxy
如
@Entity
public class A{
@Id
@TableGenerator(name = "A", table = "Map_Sequence")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "A")
private Integer id; @ManyToOne
private B b;}
它不就是把数据库表作为对象印射了,然后再生成了一些dao方法
在我看来它不就是自动生成了如entity和dao一样的存在吗,这样方便我们调用,而且大大减少了我们传统通过sql语句访问数据
库而写的代码量..如果不是要进行特殊的复杂查寻,就那些印射而成的方法就够我们用的了..
毫不夸张的说,如果不进行复杂查询,自己写hql,一个数据库的Hibernate印射文档的生成,都不要几分钟..实在方便,不管你跨多少个表,不管你表与表之间
存在了多少的主,外键关系..还有那什么生成的那个hibernate的xml文档又不要自动动手写都是在数据库里建好关系直接印射过来的,有什么看不懂的.
偏偏要把简单的东西复杂化:
多对一:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="dao.TblJd" table="TBL_JD" schema="dbo" catalog="zf">
<id name="jdid" type="java.lang.Integer">
<column name="jdid" />
<generator class="native"></generator>
</id>
<many-to-one name="tblQx" class="dao.TblQx" fetch="select">
<column name="qxid" not-null="true" />
</many-to-one>
<property name="jd" type="java.lang.String">
<column name="jd" length="50" />
</property>
</class>
</hibernate-mapping>
一对多:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="dao.TblQx" table="TBL_QX" schema="dbo" catalog="zf">
<id name="qxid" type="java.lang.Integer">
<column name="qxid" />
<generator class="native"></generator>
</id>
<property name="qx" type="java.lang.String">
<column name="qx" length="50" />
</property>
<set name="tblJds" inverse="true">
<key>
<column name="qxid" not-null="true" />
</key>
<one-to-many class="dao.TblJd" />
</set>
</class>
</hibernate-mapping>
就这些,都是自动生成的xml文档,又不要写,就算有一天有些关系不在了,你也可以在这里面改改吗..想再添一些关系也可以仿照上面的关系写写.
人的脑容量有多少呢,要学会变通..你理解了,代码当然是能少写就少写了,提高效率.
一般你会做了,就差不多理解了..可是很多时候你理解了,却并不能操作出来
不要告诉我,你们所有的hibernate的xml都是自己手写配置的..
自去去下载.看看
实体类一对一主键的配置
2.实体类一对一外键配置
3.单向多对一关联单双向配置
4.双向多对一关联单双向
都有,,王勇的..
自动生成??
工具没了你找谁生成?
公司以前的项目要你改也自动生成?
有的关联不需要你也让系统自动生成?
自己总归要去改改
我用它自动生成的映射,做个登录,出来3条select语句,这样也行?
难道不要确认下那些要,哪些不要么?
<meta>元素的属性 属性 描述
class-description 指定描述类的javaDoc
field-description 指定描述类的属性javaDoc
interface 如果为true,表明生成接口而非类,默认false
implements 指定类所实现的接口
extends 指定继承的父类名
generated-class 重新指定生成的类名
scope-class 指定类的修饰符,默认public
scope-set 指定set方法的修饰符,默认public
scope-get 指定get方法的修饰符,默认public
scope-field 指定类的属性的修饰符,默认private
use-in-toString 如果为true,表示在toString()方法中包含此属性
gen-property 如果为false,不会在java类中生成此属性,默认true
finder-method 指定find方法名
<column>元素属性
name 设定字段名字
length 设定字段长度
not-null 如为true,指名该字段不允许为null,默认false
unique 如为true,指名该字段具有唯一约束,默认false
index 给一个或多个字段建立索引
unique-key 为多个字段设定唯一约束
foreign-key 为外键约束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含
foreign-key属性,在双向关联中,inverse属性为true的一端不能设置foreign-key
sql-type 设定字段sql类型
check 设定sql检查约束
用于控制insert or update 语句的映射属性 <property>元素的insert属性 如为false,在insert中不包含该字段,默认为true
<property>元素的update属性 如为false,在update中不包含该字段,默认为true
<class>元素的mutable属性 如为false,等价于所有字段的update属性为false,默认为true
<property>元素的dunameic-insert属性 如为true,表明动态生成insert语句,只有不为null,才会包含insert语句中,默认false
<property>元素的dunameic-update属性 如为true,表明动态生成update语句,只有不为null,才会包含insert语句中,默认false
<class>元素的dunameic-insert属性如为true,表明等价于所有字段动态生成insert语句,只有不为null,才会包含insert语句中 ,默认false
<class>元素的dunameic-update属性如为true,表明等价于所有字段动态生成update语句,只有不为null,才会包含insert语句中 ,默认false Hibernate提供的内置标识符生成器
increment 适用于代理主键,自动递增,增1(只能是long,int,short)
identity 适用于代理主键,底层数据库自动增长字段类型(数据库需支持,只能是long,int,short)
(oralce)sequence 适用于代理主键,根据底层数据库的序列来生成标识符(数据库支持序列,只能是long,int,short)
hilo 适用于代理主键,根据high/low算法来生成.Hibernate把特定表的字段作为high值,在默认情况下选用hibernate_unique_key表的next_hi字段
(mysql,mssql)native 适用于代理主键,根据数据库自动生成标识符支持能力,来选择identity,sequence,hilo
uuid.hex 适用于代理主键,采用128位UUID(universal unique identification)算法来生成标识.此算法能在网络环境中生成唯一的字符串标识符,
(不建议使用,字符串类型比整形类型的主键占用更多的空间)
assigned 适用于自然主键,由java程序负责生成. <hibernate-mapping>
<class name="项目路径" table="库中对应表名" schema="dbo" catalog="netoa">
<meta attribute="class-description">指定描述类的javaDoc</meta>
<meta attribute="class-scope">指名类的修饰类型</meta>
<meta attribute="extends">指定继承类</meta>
<id name="bgrkbh" type="long">
<column name="BGRKBH" precision="15" scale="0" sql-type="库中类型" check="BGRKBH>10"/>
<meta attribute="scope-set">指定类,类属性的getxxx(),setxxx()方法的修饰符
包括:static,final,abstract,public,protected,private
</meta>
<generator class="assigned" />
</id>
<property name="Class.fileName" type="long">
<column name="YSLX" precision="精度" scale="刻度" not-null="默认false" sql-type="数据库中类型"/>
附加属性不会影响Hibernate的运行行为
<meta attribute="field-description">指定描述类的javaDoc</meta>
指定描述类属性的javaDoc
</property>
</class>
</hibernate-mapping>
注意:
1 Session的commit()和flush()方法的区别,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;
commit()方法会先调用flush(),然后提交事务.提交事务意味着对数据库所作的更新被永久保存下来. 2 Session的setFlushMode()方法用于设定清理缓存的时间点.FlushMode类定义了三种不同的清理模式 清理缓存的模式 Session的查询方法 Session的commit()方法 Session的flush()方法
FlushMode.AUTO 清理 清理 清理
FlushMode.COMMIT 不清理 清理 清理
FlushMode.NEVER 不清理 不清理 清理 3 Hibernate应用中java对象的状态
临时状态 (transient):刚刚用new语句创建,还没被持久化,不处与Session的缓存中,处于临时状态的java对象被称为临时对象.
持久化状态(persistent):已经被持久化,加入session的缓存中.处于持久化状态的java对象被称为持久化对象.
游离状态(detached):已经被持久化,但不在处于session的缓存中.处于游离状态的java对象被称为游离对象.
(注意:::::)持久化类与持久化对象是不同的概念.持久化类的实例可以处于临时状态,持久化状态和游离状态.其中处于
持久化状态的实例 被称为持久化状态. 临时对象的特性:
1 不处于缓存中,也可以说,不被任何一个Session实例关联
2 在数据中没有对应的纪录. 在此情况下,java对象进入临时状态
1 当通过new创建一个对象时,此时不和数据库中的任何纪录的 ex:对象的状态转化过程 程序代码 对象的生命周期 对象的状态
tx=session.beginTransaction();
Object obj=new Object("tow",new HashSet()); 开始生命周期 临时状态 session.save(obj); 处于生命周期 转化为持久状态 Long id=obj.getId();
obj=null;
Object obj2=(Object)session.load(Object.class,id); 处于生命周期 处于持久化状态
tx.commit(); session.close(); 处于生命周期 转变成游离状态 System.out.print(obj2.getName()); 处于生命周期 处于游离状态 obj2=null; 结束生命周期 结束生命周期
4 cascade属性 cascade属性值 描述
none 在保存更新时,忽略其他关联对象,他是cascade默认属性
save-update 当通过Session的save(),update()以及saveOrUpdate()方法来保存
或更新当前对象时,及联保存所有关联的新建的临时对象,并且及联更新所有关联的游离对象
delete 当通过session的delete()方法删除当前对象时,及联删除所有对象
all 包含save-update及delete行为,此外对当前对象执行evict()或lock
()操作时,也会对所有关联的持久化对象执行evict()或lock()操作
delete-orphan 删除所有和当前对象解除关联关系的对象
all-delete-orphan 包含all和delete-orphan 5 Hibernate映射类型,对应的java基本类型及对应的标准SQL类型 Hibernate 映射类型 java类型 标准SQL类型
integer或者int int INTEGER
long long BIGINT
short short SMALLINT
byte byte TINYINT
float float FLOAT
double double DOUBLE
big_decimal java.math.BigDecimal NUMERIC
character char and string CHAR
string string VARCHAR
boolean boolean BIT Hibernate映射类型,对应的java时间和日期类型及对应的标准SQL类型 映射类型 java类型 标准SQL类型 描述
date java.util.Date或者java.sql.Date DATE 代表日期,YYYY-MM-DD
time java.util.Date或者java.sql.Date TIME 代表时间,形式为HH:MM:SS
timestamp java.util.Date或者java.sql.Timestamp TIMESTAMP 代表日期和时间,YYYYMMDDHHMMSS
calendar java.util.Calendar TIMESTAMP 同上
calendar_date java.util.Calendar DATE 代表日期,YYYY-MM-DD
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bolink5/archive/2009/05/25/4213844.aspx