浏览 4959 次
锁定老帖子 主题:List 得问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-01-06
<hibernate-mapping> <class name="eg.Template" table="template"> <id name="templateId" type="long" column="template_id" unsaved-value="0"> <generator class="native"/> </id> <property name="templateName" column="template_name" not-null="true" length="32"/> <property name="templateType" column="template_type" length="32"/> <property name="templateDesc" column="template_desc" length="64"/> <list name="itemList" lazy="false" inverse="true" cascade="all"> <key column="template_id"/> <index column="item_id"/> <one-to-many class="com.jeyo.uprs.tng.TemplateItem"/> </list> </class> </hibernate-mapping> TemplateItem.hbm.xml配置如下 <class name="TemplateItem" table="template_item"> <id name="itemId" type="long" column="item_id" unsaved-value="0"> <generator class="native"/> </id> <property name="templateId" type="long" column="template_id"/> <property name="typeId" type="long" column="type_id"/> <property name="itemName" column="item_name" not-null="true" length="32"/> <property name="itemDesc" column="item_desc" length="64"/> <many-to-one name="template" column="template_id" /> </class> 对应关系为一个template 有多个templateitem 使用如下语句loadTemplate public Template loadTemplate(long templateId); throws UPRSException { Template result = null; Session session = null; try { session = ss.openSession();; Query q = session.createQuery( " from Template as template where template_id=" + templateId);; result = (TemplateData); q.list();.get(0);; } catch (HibernateException ex); { log.error("....HibernateException :", ex);; throw new UPRSException(ex);; } finally { ss.closeSession(session);; } return result; } 有一个奇怪得问题出现,Template.getItemList() List里面得第一个元素为null,也就是list.get(0)=null; 从list.get(1)才开始有数据?我看文档好像没有相关得说明?有没有人碰到过这个问题?还是我得配置有问题? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-01-06
引用 Template.getItemList() List里面得第一个元素为null,也就是list.get(0)=null; 从list.get(1)才开始有数据 可能是因为表template_item中没有相应的index为0的记录。 <list name="itemList" lazy="false" inverse="true" cascade="all"> <key column="template_id"/> <index column="item_id"/> <one-to-many class="com.jeyo.uprs.tng.TemplateItem"/> </list> 1 <index column="item_id"/>?这不对,index是用来指定list中元素的顺序的。 2 list在双向关联中是不能像set,bag一样简单地设置为inverse="true"。 要把list设置为inverse="true",你必须在另一端维护index。 |
|
返回顶楼 | |
发表时间:2004-01-06
试试这样
<list name="itemList" lazy="false" inverse="true" cascade="all"> <key column="template_id"/> <index column="item_index"/> <one-to-many class="com.jeyo.uprs.tng.TemplateItem"/> </list> <many-to-one name="template" column="template_id" /> <property name="itemIndex" column="item_index"/> |
|
返回顶楼 | |
发表时间:2004-01-06
首先,谢谢你的回复。
List 好像一定要有index 我也大概明白了index不是我理解的类似order by.现在我的问题如下 template 1 :的item list为item id=1,2,3 template 2 :的item list为item id=4,5,6 我希望是每次loadTemplate, template.getItemList() 得到的list 元素都是从0开始填充有什么好的方式没有?其实就是我既然使用list就希望template.getItemList() 得到template 的所有item. |
|
返回顶楼 | |
发表时间:2004-01-06
不好意思,我没有仔细看文档。使用list无法解决我上面要求的问题,我只能使用Set.
文档里相关描述如下: The mapping of a List or array requires a seperate table column holding the array or list index (the i in foo[i]). If your relational model doesn't have an index column, e.g. if you're working with legacy data, use an unordered Set instead. This seems to put people off who assume that List should just be a more convenient way of accessing an unordered collection. Hibernate collections strictly obey the actual semantics attached to the Set, List and Map interfaces. List elements don't just spontaneously rearrange themselves! |
|
返回顶楼 | |