我的一个News类中有 private List<String> images = new ArrayList<String>();  
 <class name="News" table="NEWS">
        <id name="id" column="NEWSID" length="10">
            <generator class="assigned"/>
        </id>
        <property name="title" column="TITLE"/> 
        <property name="content" column="CONTENT"/> 
        <property name="newsDate" column="NEWSDATE" type="java.util.Date"></property>
<list name="images" table="IMAGES" cascade="all" lazy="true">
<key column="NEWSID" ></key>
<list-index column="ID"></list-index>
<element type="string" column="HREF"></element>
</list>
     </class>
我在mysql建了一张表保存String list 保存时String 时,值能保存进去,但是NEWSID的值却是0,是什么原因呢? 

解决方案 »

  1.   

    参见本人博客http://blog.csdn.net/gudong2945/article/details/7054176另外根据你的配置,我觉得你几个概念没有搞清楚
    1、<list name="images" table="IMAGES" cascade="all" lazy="true">
    既然你的image已经作为一个值对象使用了,那么你的News就负责管理它的生命周期所以对于cascade="all" 是没有用的因为他是多余的。
    2、<list-index column="ID"></list-index>这个东西是记录位置的,你起名为ID,估计你对他没有理解,或者说这个起名是不合适的。
    你的映射应该没有错,按照你的描述我的做的测试类如下package com.ccay.test.valueCollection.list.xml;import java.util.ArrayList;
    import java.util.List;
    public class User {
    private long userId;
    private String firstname;
    private String lastname;
    private List<String> tasks = new ArrayList<String>();
    public long getUserId() {
    return userId;
    }
    public void setUserId(long userId) {
    this.userId = userId;
    }
    public String getFirstname() {
    return firstname;
    }
    public void setFirstname(String firstname) {
    this.firstname = firstname;
    }
    public String getLastname() {
    return lastname;
    }
    public void setLastname(String lastname) {
    this.lastname = lastname;
    }
    public List<String> getTasks() {
    return tasks;
    }
    public void setTasks(List<String> tasks) {
    this.tasks = tasks;
    }
    }
    测试代码如下package ccay.test;import java.util.ArrayList;import org.hibernate.Session;
    import org.hibernate.Transaction;import com.ccay.test.HibernateSessionFactory;public class Test {
    @org.junit.Test
    public void testDDL(){
    Session session = HibernateSessionFactory.getSession();
    Transaction transaction = session.beginTransaction();
    News news = new News();
    news.setId(1234567L);
    news.setTitle("title");
    news.setContent("content");

    ArrayList<String> images = new ArrayList<String>();
    images.add("image1");
    images.add("image2");
    images.add("image3");
    images.add("image4");
    news.setImages(images);

    session.save(news);
    transaction.commit();
    HibernateSessionFactory.closeSession();
    }
    }
    自动ddl如下
     create table IMAGES (
            NEWSID bigint not null,
            HREF varchar(255),
            ID integer not null,
            primary key (NEWSID, ID)
        )
        create table NEWS (
            NEWSID bigint not null,
            TITLE varchar(255),
            CONTENT varchar(255),
            NEWSDATE datetime,
            primary key (NEWSID)
        )
        alter table IMAGES 
            add index FK80ED76783D6C2427 (NEWSID), 
            add constraint FK80ED76783D6C2427 
            foreign key (NEWSID) 
            references NEWS (NEWSID)没有出现你的问题!