不知道为什么这不起作用!
我正在尝试从数据库中删除凭据,但是delete方法没有帮助...
这就是我的做法:
因此,这是在用户单击页面中的按钮时触发的:
$("#credentialsTable").on('click',"button[id^='del-']", (e) => {
var credentialId = e.target.id;
console.log('credId' + credentialId);
$.post( "/fisicHost/" + credentialId + "/credentials", data => {
console.log(data);
});
});
此控制器的方法正在处理该帖子:
@RestController
public class Controlador {
@Autowired
private FisicHostDao fisicHostDao;
@Autowired
private CredentialDao credentialDao;
@RequestMapping(value = "/fisicHost/{id}/credentials", method = RequestMethod.POST)
public String deleteCredential(@PathVariable(value = "id") String credId){
String[] parts = credId.split("-");
int id = Integer.parseInt(parts[1]);
Credential c = credentialDao.getCredentialById(id);
credentialDao.delete(c);
return "justreturnsomething";
}
}
这是凭据类:
@Entity
public class Credential {
@Id
private int id;
@JsonIgnore
@ManyToOne(fetch= FetchType.EAGER)
private FisicHost fisicHost;
private String user;
private String password;
private String notes;
private String role;
public Credential(){
}
public Credential(int id, FisicHost fisicHost, String user, String password, String notes, String role) {
this.id = id;
this.fisicHost = fisicHost;
this.user = user;
this.password = password;
this.notes = notes;
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public FisicHost getFisicHost() {
return fisicHost;
}
public void setFisicHost(FisicHost fisicHost) {
this.fisicHost = fisicHost;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
这是CredentialDao类:
@存储库 公共类CredentialDaoImpl实现CredentialDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public List<Credential> getAllCredentialsByFisicHost(FisicHost fisicHost) {
// Open a session
Session session = sessionFactory.openSession();
Criteria c = session.createCriteria(Credential.class).add(Restrictions.eq("fisicHost.id", fisicHost.getId()));
List<Credential> allCredentials = c.list();
// Close the session
session.close();
return allCredentials;
}
@Override
public Credential getCredentialByUser(String user) {
Session session = sessionFactory.openSession();
Credential credential = session.get(Credential.class, user);
session.close();
return credential;
}
@Override
public Credential getCredentialById(int id) {
Session session = sessionFactory.openSession();
Credential credential = session.get(Credential.class, id);
session.close();
return credential;
}
@Override
public void save(Credential credential) {
Session session = sessionFactory.openSession();
session.save(credential);
session.close();
}
@Override
public void update(Credential credential) {
Session session = sessionFactory.openSession();
session.update(credential);
session.close();
}
@Override
@Transactional
public void delete(Credential credential) {
Session session = sessionFactory.openSession();
session.delete(credential);
session.close();
}
}
好,所以我正在调试程序,当我进入控制器中的这些行时,我看到了:
Credential c = credentialDao.getCredentialById(id);
credentialDao.delete(c);
正在加载的凭据是我想要的凭据,但是删除不起作用...凭据没有从数据库中删除。
这是调试器的图片:
我可以看到credentialDao sessionFactory为= null...。这有点奇怪,可能是问题所在吗?如果是这样,如果在CredentialDaoImpl类中将sessionFactory注释为@AutoWired,这将是一个问题!
答案 0 :(得分:0)
如果您的sessionFactory为空,并且您正在使用@Autowiered批注,则意味着spring上下文无法识别您的依赖关系。 要解决此问题,请创建一个工厂函数,该函数将返回一个新的SessionFactory,然后使用@Bean批注将其作为Bean包含在内。保证春天在上下文中具有依赖性。例如:
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
然后,您可以使用@Autowired实例化对象。
@Autowired
private SessionFactory sessionFactory;
看一下: https://stackoverflow.com/a/33881946/5192140。 我想那也许可以帮到你