java.util.Collections.swap(List<?> list, int i, int j) 什么也不做
java.util.Collections.swap(List<?> list, int i, int j) do nothing
我有一个 Java Spring MVC,我的模型之一是类别
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Category extends AuditModel {
@JsonView(DataTablesOutput.View.class)
String name;
boolean active;
@Column(columnDefinition = "TEXT")
String description;
@Column(length = 70)
String metaTitle;
@Column(length = 160)
String metaDescription;
String friendlyUrl;
@OneToMany
List<Category> secondaryCategories;
String image;
Long position;
}
我尝试用 java.util.Collections.swap(List list, int i, int j) 交换 secondaryCategories 列表中两个类别的位置,但没有任何反应,也没有错误。
@Override
public ResponseEntity moveCategoryUpOrDown(Long id, Long parentId, String direction) {
if (id == parentId) {
return new ResponseEntity<>("Home category cat't be moved",HttpStatus.BAD_REQUEST);
}
Category category = categoryRepository.findOne(id);
Category parent = categoryRepository.findOne(parentId);
List<Category> secondaryCategories = parent.getSecondaryCategories();
if (direction.compareTo("up") == 0) {
if (secondaryCategories.indexOf(category) <= 0)
return new ResponseEntity<>(HttpStatus.OK);
int i = secondaryCategories.indexOf(category);
int j = secondaryCategories.indexOf(category) - 1;
// Category previous = secondaryCategories.get(j);
Collections.swap(secondaryCategories, i, j);
// categoryRepository.saveAndFlush(previous);
// categoryRepository.saveAndFlush(category);
categoryRepository.saveAndFlush(parent);
}
... etc ..
我也试过 EntityManager 在交换之前分离对象,但没有成功。我做了自己的交换方法,但我无法交换。
如何在 secondaryCategories 中交换两个类别?
您需要更新它们的 position
字段,或任何设置实体排序的内容。从 ORM 的角度来看,更改集合的顺序没有任何意义。
我有一个 Java Spring MVC,我的模型之一是类别
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Category extends AuditModel {
@JsonView(DataTablesOutput.View.class)
String name;
boolean active;
@Column(columnDefinition = "TEXT")
String description;
@Column(length = 70)
String metaTitle;
@Column(length = 160)
String metaDescription;
String friendlyUrl;
@OneToMany
List<Category> secondaryCategories;
String image;
Long position;
}
我尝试用 java.util.Collections.swap(List list, int i, int j) 交换 secondaryCategories 列表中两个类别的位置,但没有任何反应,也没有错误。
@Override
public ResponseEntity moveCategoryUpOrDown(Long id, Long parentId, String direction) {
if (id == parentId) {
return new ResponseEntity<>("Home category cat't be moved",HttpStatus.BAD_REQUEST);
}
Category category = categoryRepository.findOne(id);
Category parent = categoryRepository.findOne(parentId);
List<Category> secondaryCategories = parent.getSecondaryCategories();
if (direction.compareTo("up") == 0) {
if (secondaryCategories.indexOf(category) <= 0)
return new ResponseEntity<>(HttpStatus.OK);
int i = secondaryCategories.indexOf(category);
int j = secondaryCategories.indexOf(category) - 1;
// Category previous = secondaryCategories.get(j);
Collections.swap(secondaryCategories, i, j);
// categoryRepository.saveAndFlush(previous);
// categoryRepository.saveAndFlush(category);
categoryRepository.saveAndFlush(parent);
}
... etc ..
我也试过 EntityManager 在交换之前分离对象,但没有成功。我做了自己的交换方法,但我无法交换。
如何在 secondaryCategories 中交换两个类别?
您需要更新它们的 position
字段,或任何设置实体排序的内容。从 ORM 的角度来看,更改集合的顺序没有任何意义。