请问一个hibernate的.hbm.xml问题

student2007 2008-04-09 10:07:32
在学习hibernate notebook的时候在第四章,遇到一个问题无法理解,向大家请教
问题如下:
artist.hbm.xml文件如下
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>

<class name="com.oreilly.hh.Artist" table="ARTIST">
<meta attribute="class-description">
Represents an artist who is associated with a track or album.
@author Jim Elliott (with help from Hibernate)
</meta>

<id name="id" type="int" column="ARTIST_ID">
<meta attribute="scope-set">protected</meta>
<generator class="native"/>
</id>

<property name="name" type="string">
<meta attribute="use-in-tostring">true</meta>
<column name="NAME" not-null="true" unique="true" index="ARTIST_NAME"/>
</property>

<set name="tracks" table="TRACK_ARTISTS" inverse="true">
<meta attribute="field-description">Tracks by this artist</meta>
<key column="ARTIST_ID"/>
<many-to-many class="com.oreilly.hh.Track" column="TRACK_ID"/>
</set>

</class>

<query name="com.oreilly.hh.artistByName">
<![CDATA[
from com.oreilly.hh.Artist as artist
where upper(artist.name) = upper(:name)
]]>
</query>

</hibernate-mapping>
在上面的这个xml文件中,请问
1 column 属性的含义是什么?在这里设立colume属性的目的是什么?

2 <set name="tracks" table="TRACK_ARTISTS" inverse="true">
<meta attribute="field-description">Tracks by this artist</meta>
<key column="ARTIST_ID"/>
<many-to-many class="com.oreilly.hh.Track" column="TRACK_ID"/>
</set>
在上面的这段xml代码中,请问什么时候用set关键字,这里key column是什么意思?inverse的目的是什么?请大家逐行解释以下这段xml代码片段,谢谢
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-04-09
  • 打赏
  • 举报
回复
有用到无序集合属性时就要用到set
key column就是该集合属性所拥有的相对于该持久化类所映射数据库表关联的外键列

Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。
Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。
举例说明区别:删除“一”那一端一个对象O的时候,如果“多”的那一端的Inverse设为true,则把“多”的那一端所有与O相关联的对象外键清空;如果“多”的那一端的Cascade设为Delete,则把“多”的那一端所有与O相关联的对象全部删除。

yuanjun_xf 2008-04-09
  • 打赏
  • 举报
回复
column 对应表中的字段名

用set关键字 一般一对多或者多对多用 key column 外键 inverse 设置属性是级联删除,级联修改还是其他的
jastby 2008-04-09
  • 打赏
  • 举报
回复
1. column 属性的含义是 对应数据库的字段名称 如果和 bean 里面的变量属性一致,可以省略 这个 column , 但是bean要求第一个字母必须是小写

2. set关键字 表示 设置关联另外一个表 , key column 表示关联的数据库 外键字段,

Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。

<many-to-many class="com.oreilly.hh.Track" column="TRACK_ID"/>

多对多关联
i_saw_you 2008-04-09
  • 打赏
  • 举报
回复
column 属性对应表中的字段名
什么作用不用说了吧
用set关键字 一般一对多或者多对多用 key column 外键 inverse 忘了应该表示的是级联关系
lioushuei 2008-04-09
  • 打赏
  • 举报
回复
hbm.xml 文件在实际开发中 是由数据库表映射生成。怎么生成可以看myeclipse 使用说明。 并不是生成表的。
table="TRACK_ARTISTS" 是 ARTIST 这个表的关联表 column="TRACK_ID" 是这两个表的主外键关联字段
student2007 2008-04-09
  • 打赏
  • 举报
回复
<set name="tracks" table="TRACK_ARTISTS" inverse="true">
<meta attribute="field-description">Tracks by this artist </meta>
<key column="ARTIST_ID"/>
<many-to-many class="com.oreilly.hh.Track" column="TRACK_ID"/>
</set>
那么请问table="TRACK_ARTISTS"在这里目的是什么?是生成一个拥有artist id与 track id的表,表的外主键
是artist id吗?hbm.xml文件的作用是生成数据库schema还是生成java代码?还是两者的功能多有?刚刚开始学
习,问的比较初级?请大家指点迷津。谢谢。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧