2016-06-10 2 views
0

Я пытаюсь удалить объект из объекта с помощью 'delete' из репозитория, но что-то не работает.Spring Hibernate delete object

@Entity 
public class Director implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private Long id; 

    @Column(length = 15) 
    private String name; 

    @Column(length = 40) 
    private String surname; 

    @Column(length = 40,unique=true, nullable=false) 
    private String email; 

    @Column(length = 12) 
    private String phone; 

    @OneToOne 
    private School school; 

    public School getSchool() { 
     return school; 
    } 

    public void setSchool(School school) { 
     this.school = school; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
} 

Repository:

@Repository 
public interface DirectorRepository extends CrudRepository<Director, Long> { 

    Director findOneByEmail(String email); 

} 

Метод от контроллера:

@RequestMapping(value = "deleteDirector", method = RequestMethod.POST) 
    public String delpost(@ModelAttribute Director director) { 

     try { 
      directorRepository.delete(director.getId()); 
      return "deleteDirectorSuccess-view"; 
     } 
     catch(Exception e){ 

     } 
     return "deleteDirectorError-view"; 
    } 

Я не знаю, что там происходит, потому что она возвращает deleteDirectorSuccess-view, но не удаляет этот объект из базы данных (Im уверенный, что id правильный, я попробовал поставить directorRepository.delete(ID_FROM_DATABASE_AS_LONG);, но есть та же проблема. Если я поместил скрипт в базу данных, например:

DELETE FROM public.director 
WHERE id=ID_FROM_DATABASE; 

это работает, другой метод в контроллере, где я сохранить объект в базе данных:

directorRepository.save(director); 

отлично работает тоже.

Я понятия не имею, как проверить, почему это неправильно и как решить мою проблему.

+0

Не знаете, почему экономия работает. Вы использовали @Transactional аннотацию в любом месте? –

+0

Нет, я не @Transactional в моем проекте – barmi

+0

попытаюсь использовать его на методе delPost и посмотреть, работает ли он. –

ответ

0

Попробуйте этот код

@RequestMapping(value = "deleteDirector", method = RequestMethod.POST) 
@Transactional 
public String delpost(@ModelAttribute Director director) { 

    try { 
     Director d = directorRepository.findOne(director.getId()); 
     directorRepository.delete(d); 
     return "deleteDirectorSuccess-view"; 
    } 
    catch(Exception e){ 

    } 
    return "deleteDirectorError-view"; 
} 

Я думаю, что объект должен управляться сохранение слоя, прежде чем делать что-либо. Но это не объясняет, почему экономия работает.

+0

ничего не случилось – barmi