spr*_*ing 20 java hibernate jpa-2.0
我用一个清单.该列表由复合主键组成,该主键也用于对列表进行排序.问题是,如果我删除列表中的元素(密钥复合),注释会@OrderColumn生成更新主键的请求,并且成本会增加类型的异常:
[26-05-2011 10:34:18:835] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
[26-05-2011 10:34:18:835] ERROR org.hibernate.util.JDBCExceptionReporter -Duplicate entry '10-10' for key 'PRIMARY'
[26-05-2011 10:34:18:835] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Run Code Online (Sandbox Code Playgroud)
以下是映射的定义:
@ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "chapter_item", joinColumns = { @JoinColumn(name = "chapter_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "item_id", nullable = false, updatable = false) })
@OrderColumn(name="iorder")
public List<Item> getItems() {
return items;
}
Run Code Online (Sandbox Code Playgroud)
这是我遇到问题的更新查询:
Hibernate:
update
chapter_item
set
item_id=?
where
chapter_id=?
and iorder=?
Run Code Online (Sandbox Code Playgroud)
我想知道这是否是一个已知的bug,如果有人有解决方案?
也许一种选择是更改顺序注释并使用:
@ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "chapter_item", joinColumns = { @JoinColumn(name = "chapter_id", nullable = false, updatable = false) }, inverseJoinColumns = {@JoinColumn(name = "item_id", nullable = false, updatable = false) })
@org.hibernate.annotations.Sort(type = SortType.COMPARATOR, comparator = ItemComparator)
public List<Item> getItems() {
return items;
}
Run Code Online (Sandbox Code Playgroud)
https://dzone.com/articles/sorting-collections-hibernate
检查性能解决方案,因为对于大量数据来说可能太慢,如果您可以分享是否有可能的解决方案,那么很高兴知道