1

使用休眠 4.1.7,我有一个带有集合(附件)的类,在映射文件中定义为:

<list lazy="false" table="news_attachment" name="attachments">
      <cache usage="nonstrict-read-write"/>
      <key column="news"/>
      <index column="index_attachment"/>
      <many-to-many class="mypackage.Archive" column="attachment" unique="true"/>
</list>

我正在尝试将两个元素交换为:

   Archive archive0 = news.getAttachments().get(0);
   Archive archive1 = news.getAttachments().get(1);
   news.getAttachments().set(0, archive1);
   news.getAttachments().set(1, archive0);

但是,在提交时间,我得到了一个可怕的

org.hibernate.exception.ConstraintViolationException: Duplicate entry '163703' for key 'attachment'

而且,令我惊讶的是,mysql 更新是:

          479 Query     update news_attachment set attachment=163703 where news=53306 and index_attachment=0
          479 Query     update news_attachment set attachment=163703 where news=53306 and index_attachment=0

(令人惊讶的是 id 和 index 总是相同的)。

但是,如果我创建一个新列表,按新顺序设置对象并执行设置器,一切正常。

List<Archive> list = new ArrayList<Archive>();
list.add(news.getAttachments().get(1));
list.add(news.getAttachments().get(0));
news.setAttachments(list);

mysql.log 按我的预期输出插入,不同的 id 和索引。

原列表上的操作,不推荐吗?

4

0 回答 0