我有两个对象;Document和DocumentBatch  
文档
public class Document implements Serializable {
....
private String documentId;
private DocumentBatch documentBatch;
....}
文档批处理
public class DocumentBatch implements Serializable {
private String batchId;
private List<Document> lDocuments = new LinkedList<Document>();
....}
休眠映射:
<class name="Document" table="DOCUMENTS">
  .....
  <id name="documentID" column="DOCUMENT_ID" type="string" />
  <many-to-one name="documentBatch" class="DocumentBatch" not-null="false" 
  cascade="save-update" lazy="false" insert="false" update="false">
        <column name="BATCH_ID" not-null="true" />
    </many-to-one>
  ......
</class>
<class name="DocumentBatch" table="DOCUMENT_BATCHES">
     <id name="batchId" column="BATCH_ID" type="string" /> 
     <list name="lDocuments" table="DOCUMENTS" cascade="all"
        inverse="false" lazy="false" mutable="true">
        <key not-null="true">
            <column name="BATCH_ID" />
        </key>
        <list-index column="LIST_INDEX" base="0" />
        <one-to-many class="Document" />
       </list>
     ......
 </class>
DocumentBatch有一个列表Document,每次我运行我的测试用例并使用相同的主键session.saveOrUpdate(documentBatch)更新DocumentBatch对象,但使用新生成的文档对象列表(所有对象都是新生成的。)。
Hibernate 将DocumentBatch通过保存带有索引的全新文档列表进行更新,但不会删除列表中的旧元素。
所以当我运行我的测试用例两次并且每次文档列表都有 5 个 Obj 时,我最后会有 10 个 objs。两个索引=0,两个索引=1,等等。
所以它不会更新列表,而只会保存新列表。旧列表的元素可以在数据库中找到。当我尝试获取DocumentBatch, DocumentBatch旧对象列表时。  
我怎么解决这个问题?哪里出错了?非常感谢。
更新 1:UnitTestCase
 @Test
public void testSaveDocumentBatch() throws Throwable {
....
String batchId = "500700";
DocumentBatch documentBatch = new DocumentBatch(batchId, name);
    ....
    for (int i = 0; i < 5; i++) {
    String documentID = SessionIdentfierGenerator.nextSessionId();//generatting Id
    Document document = new Document(documentID);
    documentBatch.insertDocument(document);
}
    ....
    session.saveOrUpdate(documentBatch);
    ....}
以及类 DocumentBatch 中的方法 insertDocument(Document document):
public class DocumentBath{
.....
private List<Document> lDocuments = new LinkedList<Document>();
.....
public void insertDocument(Document document) {
    lDocuments.add(document); // lDocuments is a list DocumentBatch
    document.setDocumentBatch(this);
}
.....}
更新 2:Oracle 数据库脚本:
文件的
CREATE TABLE DOCUMENTS(
DOCUMENT_ID VARCHAR2(255 CHAR) NOT NULL,
BATCH_ID VARCHAR2(255 CHAR) NOT NULL,
...);  
CREATE UNIQUE INDEX PK_DOCUMENT ON DOCUMENTS (DOCUMENT_ID); 
ALTER TABLE DOCUMENTS ADD (CONSTRAINT PK_DOCUMENT PRIMARY KEY (DOCUMENT_ID) USING INDEX PK_DOCUMENT); 
ALTER TABLE DOCUMENTS ADD (CONSTRAINT FK_DOCUMENT_BATCH_ID FOREIGN KEY (BATCH_ID) REFERENCES DOCUMENT_BATCHES (BATCH_ID) ON DELETE CASCADE);
DocumentBatch 的
CREATE TABLE DOCUMENT_BATCHES(
BATCH_ID VARCHAR2(255 CHAR)     NOT NULL
...);
ALTER TABLE DOCUMENT_BATCHES ADD (
PRIMARY KEY (BATCH_ID));