首先是错误描述
Hibernate: insert into COMMMessages (title, keyWords, content, personId, sendDate) values (?, ?, ?, ?, ?)
Hibernate: insert into COMMMails (type, outMailItemId, Mail) values (?, ?, ?)
Hibernate: insert into COMMOutMailItems (mailId, personId) values (?, ?)
2012-04-20 08:57:14 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] Column 'mailId' cannot be null
com.aheadsoft.egovernment.core.exception.CommandException: com.aheadsoft.egovernment.core.exception.InfrastructureException: org.hibernate.exception.ConstraintViolationException: could not insert: [com.aheadsoft.egovernment.communication.entity.OutMailItem]
Hibernate: insert into COMMInMailItems (readed, mailId, personId) values (?, ?, ?)
2012-04-20 08:57:14 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] Column 'mailId' cannot be nullcommmessages的hibernate配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping
        package="com.aheadsoft.egovernment.communication.entity"
        >
    <class
            name="Message"
            table="COMMMessages"
            >        <id
                name="id"
                column="id"
                type="java.lang.Long"
                access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                >
            <generator class="identity">
                <!--
                    To add non XDoclet generator parameters, create a file named
                    hibernate-generator-params-Message.xml
                    containing the additional parameters and place it in your merge dir.
                -->
            </generator>
        </id>        <property
                name="title"
                type="java.lang.String"
                update="true"
                insert="true"
                column="title"
                />        <property
                name="keyWords"
                type="java.lang.String"
                update="true"
                insert="true"
                column="keyWords"
                />        <property
                name="content"
                type="string"
                update="true"
                insert="true"
                column="content"
                length="8000"
                />        <many-to-one
                name="sender"
                class="com.aheadsoft.egovernment.core.entity.Person"
                cascade="save-update"
                outer-join="auto"
                update="true"
                insert="true"
                column="personId"
                not-null="true"
                />        <property
                name="sendDate"
                type="timestamp"
                update="true"
                insert="true"
                column="sendDate"
                />        <set
                name="attachments"
                cascade="all-delete-orphan"
                sort="unsorted"
                access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                outer-join="auto"
                >            <key
                    column="messageId"
                    >
            </key>            <one-to-many
                    class="com.aheadsoft.egovernment.core.entity.Attachment"
                    />        </set>        <set
                name="receivePersons"
                table="COMMMessage_ReceivePersons"
                lazy="true"
                cascade="save-update"
                sort="unsorted"
                access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                >            <key
                    column="messageId"
                    >
            </key>            <many-to-many
                    class="com.aheadsoft.egovernment.core.entity.Person"
                    column="personId"
                    outer-join="auto"
                    />        </set>        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Message.xml
            containing the additional properties and place it in your merge dir.
        -->        <joined-subclass
                name="com.aheadsoft.egovernment.communication.entity.Mail"
                table="COMMMails"
                >
            <key
                    />
            <property
                    name="type"
                    type="int"
                    update="true"
                    insert="true"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    column="type"
                    />            <many-to-one
                    name="outMailItem"
                    class="OutMailItem"
                    cascade="all"
                    outer-join="auto"
                    update="true"
                    insert="true"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    column="outMailItemId"
                    not-null="false"
                    />            <set
                    name="inMailItems"
                    lazy="true"
                    inverse="true"
                    cascade="all-delete-orphan"
                    sort="unsorted"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    >                <key
                        column="_mailId"
                        >
                </key>                <one-to-many
                        class="InMailItem"
                        />            </set>        </joined-subclass>
        <joined-subclass
                name="com.aheadsoft.egovernment.communication.entity.Notice"
                table="COMMNotices"
                >
            <key
                    />            <many-to-one
                    name="sendCompany"
                    class="com.aheadsoft.egovernment.core.entity.Company"
                    cascade="save-update"
                    outer-join="auto"
                    update="true"
                    insert="true"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    column="sendCompanyId"
                    />            <many-to-one
                    name="sendDepartment"
                    class="com.aheadsoft.egovernment.core.entity.Department"
                    cascade="save-update"
                    outer-join="auto"
                    update="true"
                    insert="true"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    column="sendDepartmentId"
                    />            <set
                    name="receiveCompanies"
                    table="COMMNotice_ReceiveCompanies"
                    lazy="true"
                    cascade="save-update"
                    sort="unsorted"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    >                <key
                        column="noticeId"
                        >
                </key>                <many-to-many
                        class="com.aheadsoft.egovernment.core.entity.Company"
                        column="companyId"
                        outer-join="auto"
                        />            </set>            <set
                    name="receiveDepartments"
                    table="COMMNotice_ReceiveDepartments"
                    lazy="true"
                    cascade="save-update"
                    sort="unsorted"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    >                <key
                        column="noticeId"
                        >
                </key>                <many-to-many
                        class="com.aheadsoft.egovernment.core.entity.Department"
                        column="departmentId"
                        outer-join="auto"
                        />            </set>            <set
                    name="inNoticeItems"
                    lazy="true"
                    inverse="true"
                    cascade="all-delete-orphan"
                    sort="unsorted"
                    access="com.aheadsoft.egovernment.core.dao.DirectSetAccessor"
                    >                <key
                        column="noticeId"
                        >
                </key>                <one-to-many
                        class="InNoticeItem"
                        />            </set>        </joined-subclass>    </class></hibernate-mapping>