在我的春季启动应用程序中,我使用查询方法deleteByCollectioId(someValue)
(其中CollectionId是字段名)删除给定值的DB中存在的所有条目。
@Transactional
@Modifying
void deleteByCollectionId(Long collectionId);
这段代码工作了很多天,但最近几次,这开始给我一个错误说
批量更新update[0]返回意外行数;实际行数:2;预期:1;org.hibernate.jdbc.BatchedTooManyRowsAffectedException:批量更新从update[0]返回意外的行数;实际行数:2;预期:1
我无法找到根本原因,因为这个错误大多数时候是不可重复的。在实体类或代码有什么错误吗?
实体类
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@ToString(doNotUseGetters = true)
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Builder
@Entity
@Table(name = "myCollection")
public class Collection {
@Id
@Column(name = "id")
@GeneratedValue(generator = "auto_inc_id")
@GenericGenerator(name = "auto_inc_id", strategy = "increment")
private Long id;
@Column(name = "collection_id")
@JsonProperty(value = "collection_id")
private Long collectionId;
..
..
..
}
注意:这里collectionId
在多行中不是唯一的,可以有多个行具有相同的collectionId
是否有可能在所有集合中集合ID不是唯一的?您的主键似乎是id
。如何保证集合ID是唯一的?
你可能想实现你自己的equals/hash
方法。
你也不需要@Modifying
注释。它只在使用Query注释时使用。Spring Data Doc