论坛首页 Java企业应用论坛

能不能实现:类里面是List类型的属性,但表里没有额外的inde...

浏览 7712 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-10-04  
我一开始把id列作为index,但id列不是连续的,所以产生了很多null值。
又没有什么办法解决这个问题呢?
   发表时间:2003-10-04  
bjzhanghao 写道
我一开始把id列作为index,但id列不是连续的,所以产生了很多null值。
又没有什么办法解决这个问题呢?


在表里面新建一个字段作为index
0 请登录后投票
   发表时间:2003-10-04  
这个字段的值要在程序里自己写代码生成,对吗?
0 请登录后投票
   发表时间:2003-10-04  
可以用List模拟bag,即类里的属性是List,映射文件里是bag。
0 请登录后投票
   发表时间:2003-10-08  
robbin 写道
bjzhanghao 写道
这个字段的值要在程序里自己写代码生成,对吗?


不用,由Hibernate来管理。


但是我试了一下,用orderNum字段作为index,每新建一个对象的时候orderNum都是零
0 请登录后投票
   发表时间:2003-10-08  
robbin说的没错,请你贴出映射文件和程序。
0 请登录后投票
   发表时间:2003-10-08  
程序后来改了很多,hibernate管理的这个index列里,是不是有可能不连续?这样的问题就是会出现很多null值,有没有办法避免这些null值呢。
我遇到的情况是,一个栏目Column类,一个文章Article类,Column里有一个List articles=new ArrayList(),mapping文件如下:

Column.hbm.xml
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
	<class name="com.harmony.cms.Column" table="c_column">
	    
		<id name = "name" column="columnName" type="string">
			<generator class="assigned"/>
		</id>
		
		<property name="caption" column="caption"/>
		<property name="themeNameForList" column="themeNameForList"/>
		<property name="themeNameForArticle" column="themeNameForArticle"/>
		<property name="templateName" column="templateName"/>
		<many-to-one name="parent" column="parentName" class="com.harmony.cms.Column" cascade="save-update"/>
		<property name="list" column="list"/>
		<property name="level" column="level"/>
		<property name="open" column="open"/>
		<property name="virtual" column="virtual"/>
		<property name="pageSize" column="pageSize"/>
        <list name="articles">
            <key>
                <column name="columnName" not-null="true"/>
            </key>
            <index column="orderNum"/>
            <one-to-many class="com.harmony.cms.Article"/>
        </list>
        <list name="children">
            <key>
                <column name="parentName" not-null="true"/>
            </key>
            <index column="orderNum"/>
            <one-to-many class="com.harmony.cms.Column"/>
        </list>
	</class>
</hibernate-mapping>


Article.hbm.xml
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
	<class name="com.harmony.cms.Article" table="article">
	    
		<id name = "id" column="aid" type="integer">
			<generator class="identity"/>
		</id>
		
		<property name="title" column="title"/>
		<property name="author" column="author"/>
		<property name="source" column="source"/>
		<many-to-one name="column" column="columnName" class="com.harmony.cms.Column" cascade="save-update"/>
		<set name="keywords" table="keyword">
			<key column="aid"/>
			<element column="keyword" type="string"/>
		</set>
		<property name="description" column="description"/>
		<property name="content" column="content"/>
		<property name="thumb" column="thumb"/>
		<property name="attachment" column="attachment"/>
		<property name="buildDate" column="buildDate"/>
		<property name="modifyDate" column="modifyDate"/>
		<property name="counter" column="counter"/>
		<property name="orderNum" column="orderNum"/>
        <list name="comments">
            <key>
                <column name="aid" not-null="true"/>
            </key>
            <index column="orderNum"/>
            <one-to-many class="com.harmony.cms.Comment"/>
        </list>
	</class>
</hibernate-mapping>


在做了一些添加/删除文章的操作后,就出现null值了,也就是column表里的orderNum不连续,请看看是不是文件写的不对?

谢谢!
0 请登录后投票
   发表时间:2003-10-09  
映射文件应该没问题。

引用

在做了一些添加/删除文章的操作后,就出现null值了,也就是column表里的orderNum不连续

肯定会出现这种情况的。干嘛非要用List,用Set不是方便很多吗?
0 请登录后投票
   发表时间:2003-10-09  
yehs220 写道
映射文件应该没问题。

引用

在做了一些添加/删除文章的操作后,就出现null值了,也就是column表里的orderNum不连续

肯定会出现这种情况的。干嘛非要用List,用Set不是方便很多吗?


因为我希望得到的集合是按照orderNum这个字段排序的,用Set能实现吗,Set不是没有顺序的吗……我一开始就是用Set的,后来花了一整天时间改成用List的……
而且听说List的效率比较高,一般都用List,是吗?
不是说hibernate会自己维护index这个字段的值吗,没想到现在遇到这种问题,再改程序又得花一两天的时间,天啊……
0 请登录后投票
   发表时间:2003-10-09  
5.7. Other Ways To Sort a Collection
If you want the database itself to order the collection elements use the order-by attribute of set, bag or map mappings. This solution is only available under JDK 1.4 or higher (it is implemented using LinkedHashSet or LinkedHashMap);. This performs the ordering in the SQL query, not in memory. 


引用

而且听说List的效率比较高,一般都用List,是吗?

List效率确实较高,但最常用的还是Set吧。

我一般用Collection都是作为bidirectional association的inverse端,所以List和Set两者效率都是一样高的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics