Я хочу удалить отношение с одной стороны. Позволь мне объяснить.Как удалить объект в одной стороне при двунаправленном отношении?
Моей база данных выглядит следующим образом:
я основывала свои хранилища на JPARepository
.
и у меня есть два объекта Team
и Player
.
Player
Entity выглядит следующим образом:
@Entity
@Table(name = "PLAYER")
public class Player implements Serializable, Comparable<Player>{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id_player;
@Size(min=3, max=20)
private String name;
@Size(min=3, max=20)
private String surname;
@Size(min=3, max=20)
private String position;
@Min(value=10)
private int age;
@Min(value=1)
private int number;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_team")
private Team team;
//getters and setters
}
... и Team
сущность:
@Entity
@Table(name = "TEAM")
public class Team implements Serializable, Comparable<Team>{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id_team;
@Size(min=4, max=20)
private String name;
@Size(min=4, max=20)
private String city;
private int goals_hit;
private int goals_lost;
private int points;
private int ranked;
@OneToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "id_coach")
private Coach coach;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_stadium")
private Stadium stadium;
@OneToMany(mappedBy = "team", fetch = FetchType.LAZY)
private List<Player> playerList;
@OneToMany(mappedBy = "team", fetch = FetchType.LAZY)
private List<TeamChoosenDate> teamChoosenDateList;
//getters and setters
}
Так Player
содержит одно отношение к Team
но Team
содержит List
из Players
.
Тренер может изменить свою команду и, например, он хочет удалить Player
из Team
(соотношения между Team
->Player
), но не потерять Player
(потому что он имеет отношение с другими таблицами - Events
).
В заключение: Удалить Player
от правильного Team
, но НЕ ПОТЕРЯТЬ Player
объект.
Как это сделать?
Моя попытка: Я удалить Player
из List
, но каждый раз, когда я перезагрузки - он возвращается ... Ниже метод показывает, как я это делаю:
public void deletePlayerFromTeamPlayerList(Long idTeam, int idPlayer){
Team team = teamRepository.findOne(idTeam);
Player playerTmp = playerRepository.findOne((long) idPlayer);
List<Player> playerList;
int indexOfFindedPLayer;
playerList = team.getPlayerList();
System.out.println("Before Delete: " + playerList.toString());
indexOfFindedPLayer = playerList.indexOf(playerTmp);
if(indexOfFindedPLayer >= 0){
playerList.remove(indexOfFindedPLayer);
System.out.println("After Delete: " + playerList.toString());
team.setPlayerList(playerList);
teamRepository.save(team);
}
}
Но когда элемент удаляется, в Player
объект id_team
все тот же (например, id_team = 2)
Спасибо за все предложения!
Я собирался прокомментировать что-то вроде этого. Кстати, я бы добавил, что модель базы данных должна быть изменена, чтобы иметь дополнительную таблицу/сущность для представления отношения между игроком/командой, поэтому было бы намного лучше для этих типов вещей. – Bonifacio
'Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). Ошибка обработки запроса; Вложенное исключение - org.springframework.dao.DataIntegrityViolationException: невозможно выполнить оператор; SQL [n/a]; ограничение [null]; Вложенное исключение - org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор 'и в консоли' Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id_team' не может быть нулевым. – czArek
Поле типа 'id_team'' 'int ', но, возможно, мне следует добавить некоторые параметр, который позволяет этому полю быть «нулевым»? – czArek