2016-06-10 75 views
0

我尝试从存储库中使用'删除'从实体中删除对象,但有些东西不起作用。Spring Hibernate删除对象

@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; 
    } 
} 

库:

@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:

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

    Director findOneByEmail(String email); 

} 

从控制器的方法确定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