powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
5 сообщений из 5, страница 1 из 1
Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
    #37802166
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Есть класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Entity
@Table(name="groupt")
public class GroupT extends AUIBean implements Serializable,IUIBean {
	@Id
	private String cod;
	private String name="";
	@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	@org.hibernate.annotations.IndexColumn(name="POSITION", base = 1)
	private List<GroupT> childs=new ArrayList<GroupT>();
}



Хочу передвинуть один из child по коллекции вверх или вниз. Делал уже по разному. Никак. Дошел уже до такого.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	public void moveUp(GroupT movedGroup, GroupT parent) {
		parent=init(parent);
		int index=parent.getChilds().indexOf(movedGroup);
		movedGroup=parent.getChilds().get(index);
		GroupT prevGroup = parent.getChilds().get(index-1);
		parent.getChilds().remove(index);
		parent.getChilds().remove(prevGroup);
		getSession().flush();
		parent.getChilds().add(index-1, movedGroup);
		parent.getChilds().add(index, prevGroup);
		update(parent);
	}


Подскажите как правильно.
...
Рейтинг: 0 / 0
Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
    #37802188
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не уточнил. Spring+Hibernate.Это первое. Пробовал так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	public void moveDown(GroupT movedGroup, GroupT parent) {
		parent=init(parent);
		int index=parent.getChilds().indexOf(movedGroup);
		movedGroup=parent.getChilds().get(index);
		GroupT prevGroup = parent.getChilds().get(index-1);
		System.out.println("i prev"+index+" cod "+prevGroup.getCod());
		parent.getChilds().remove(index);
		parent.getChilds().remove(prevGroup);
// Убрал		getSession().flush();

		parent.getChilds().add(index-1, movedGroup);
		
		parent.getChilds().add(index, prevGroup);
		
		update(parent);
     }
// Смотрю логи хибера:
// Кроме какого-то непонятного update  ничего. Ни удалений, ни вставок
// Hibernate: update db.groupt_groupt set childs_cod=? where groupt_cod=? and POSITION=?. 
...
Рейтинг: 0 / 0
Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
    #37802196
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bob1970,

Коллекция детей неупорядочена.
В Бд это будет ссылка на Pk родителя по FK. Можешь сам сгенерировать схему и посмотреть, там никакого порядка не будет скорее всего. Если будет, тебе повезло. поэтому надо добавлять поле порядка явно. Как его потом отобразить в хибере и менять это уже другой вопрос.
...
Рейтинг: 0 / 0
Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
    #37802553
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Не. Индекс создается и работает. Есть колонка в базе и вот тут
Код: java
1.
	int index=parent.getChilds().indexOf(movedGroup);


он нормално определяется.
...
Рейтинг: 0 / 0
Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
    #37803157
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bob1970,

У вас точно одна и та же таблица в связи?
Попробуйте так -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...

@Entity
public class Child {
  @Id 
   private Long id;
  
   private int position; 
   ...
} 
...
@Entity
public class Parent {
  @Id 
   private Long id;

  @OneToMany
  private List<Child> childs = new LinkedList<Child>();
  ...
}
...



Потом просто отсортируйте коллекцию требуемым образом, реализовав свой компаратор -
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
public class ChildComparator implements Comparator {
   public int compare(Object child1, Object child2) {
      Child child1 = (Child)child1;
      Child child2 = (Child)child2;
      
      return child2.getPosition() - child1.getPosition();
  }
}
...

Collections.sort(List childs, Comparator cmp);
...



, и перенумеруйте позиции -

Код: java
1.
2.
3.
4.
5.
...
for(int i=0; i < childs.size(); i++)
        childs.get(i).setPosition(i);

...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сдался! Прошу помощи. Hibernate, OneToMany. Передвижение элемента в списке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]