gpt4 book ai didi

java - 更新功能像我的添加功能一样工作(Spring,Hibernate,mvc)

转载 作者:行者123 更新时间:2023-12-02 06:04:37 24 4
gpt4 key购买 nike

我是SH mvc新手,我学习spring hibernate mvc,我进行CRUD实现,但是当我尝试更新功能时,数据库不会改变,但看起来就像我在数据库中创建新数据时一样。 .我该怎么办

This data will be changed

- i rename the name with : hello world and i click update..

This is the result, "sasazaki mami" Data is still here and is not renewable with "Hello World" data

这是我的 Controller

     package com.list.satu;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.list.satu.entity.Anggota;
import com.list.satu.service.AnggotaService;

@Controller
@RequestMapping("test")
public class AnggotaController {
private static final Logger logger = LoggerFactory
.getLogger(AnggotaController.class);

private AnggotaService anggotaService;
private Validator validator;

@Autowired
public void setAnggotaService(AnggotaService anggotaService) {
this.anggotaService = anggotaService;
}

@Autowired
public void setValidator(Validator validator) {
this.validator = validator;
}

@RequestMapping(value = "/anggota", method = RequestMethod.GET)
public String search(Model model) {
List<Anggota> anggota = anggotaService.getAllAnggota();
model.addAttribute("anggota", anggota);

return "test/anggota";
}

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addNew(Model model) {
model.addAttribute("anggota", new Anggota());
return "test/add";
}

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String save(Anggota anggota, Model model, BindingResult errors,
HttpServletRequest request) {
if (validator != null) {
validator.validate(anggota, errors);
}
if (errors.hasErrors()) {

return "test/add";
}
this.anggotaService.save(anggota);
return "redirect:/test/anggota";
}

@RequestMapping(value = "/edit/{npm}", method = RequestMethod.GET)
public String editRecord(@PathVariable("npm") Integer kode, Model model,
HttpServletRequest request) {
logger.info("Received npm" + kode.toString());
Anggota anggota = this.anggotaService.getById(kode);
model.addAttribute("anggota", anggota);
return "test/edit";
}

@RequestMapping(value = "/edit/{npm}", method = RequestMethod.POST)
public String edit(@ModelAttribute Anggota anggota, Model model,
BindingResult errors, HttpServletRequest request,
@PathVariable Integer npm) {

if (validator != null) {
validator.validate(anggota, errors);
}
if (errors.hasErrors()) {

return "test/anggota";
}
anggota.setNpm(npm);
this.anggotaService.update(anggota);

System.out.println(anggota.getNpm());
System.out.println(anggota.getNama());
System.out.println(anggota.getUmur());

return "redirect:/test/anggota";
}
}

我的 Dao 工具

包 com.list.satu.dao.im;

    import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import com.list.satu.dao.AnggotaDao;
import com.list.satu.entity.Anggota;


@Repository
public class AnggotaDaoim implements AnggotaDao{
private HibernateTemplate hibernateTemplate;
@Autowired
private SessionFactory sessionFactory;

public List<Anggota> getAllAnggota(){
Session session = sessionFactory.getCurrentSession();
return session.createQuery("FROM Anggota").list();
}

public List<Anggota> getAllAnggotaDetails() {
Session session = sessionFactory.getCurrentSession();
return session.createQuery("FROM Anggota a LEFT JOIN FETCH a.flight").list();
}

public Anggota getAnggota(Anggota anggota) {
// TODO Auto-generated method stub
return null;
}

@Override
public void save(Anggota anggota) {
// TODO Auto-generated method stub
Session session = sessionFactory.getCurrentSession();
session.merge(anggota);
}

@Override
public void update(Anggota anggota) {
// TODO Auto-generated method stub
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(anggota);
}

@Override
public Anggota getById(Integer kode) {
// TODO Auto-generated method stub
return (Anggota) this.sessionFactory.getCurrentSession().get(Anggota.class, kode);
}

@Override
public void remove(Anggota anggota) {
// TODO Auto-generated method stub
Session session = sessionFactory.getCurrentSession();
session.delete(anggota);

}}

我的服务工具

    package com.list.satu.service.im;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.list.satu.dao.AnggotaDao;
import com.list.satu.entity.Anggota;
import com.list.satu.service.AnggotaService;

@Service
public class AnggotaServiceIm implements AnggotaService{

@Autowired
private AnggotaDao anggotaDao;

public AnggotaDao getAnggotaDao() {
return anggotaDao;
}

public void setAnggotaDao(AnggotaDao anggotaDao) {
this.anggotaDao = anggotaDao;
}

@Transactional
public List<Anggota> getAnggotaDetails() {
return anggotaDao.getAllAnggotaDetails();
}

@Transactional
public List<Anggota> getAllAnggota() {
// TODO Auto-generated method stub
return anggotaDao.getAllAnggota();
}

@Transactional
public void save(Anggota anggota) {
// TODO Auto-generated method stub
anggotaDao.save(anggota);
}

@Override
@Transactional
public void update(Anggota anggota) {
// TODO Auto-generated method stub
anggotaDao.update(anggota);
}

@Override
@Transactional
public Anggota getById(Integer kode) {
// TODO Auto-generated method stub
return anggotaDao.getById(kode);
}

@Override
@Transactional
public void remove(Anggota anggota) {
// TODO Auto-generated method stub
anggotaDao.remove(anggota);
}


}

我的 jsp 操作

    <form:form role="form" action="/satu/test/edit/${npm}"
commandName="anggota" method="post">

Thanksss before ^^

最佳答案

尝试这样

@Override
public void update(Anggota externalAnggota) {
Session session = sessionFactory.getCurrentSession();

Anggota dbAnggota = (Anggota)session.load(Anggota.class, externalAnggota.getId());

//now set all your values from exteralAnggota instance to dbAnggota instance.
dbAnggota.setName(exteralAnggota.getName());

//Set for all the fields

session.saveOrUpdate(dbAnggota);
}

原因您传递给 session 的对象不是 session 的一部分,因此 hibernate 引擎将其视为新实例并创建新行。 saveOrUpdate() 方法基于以下条件工作

1)如果该对象已经在当前 session 中持久化,则它会执行 什么都没有

2)如果与 session 关联的另一个对象具有相同的 标识符,向调用者抛出异常

3)如果对象没有identifier属性,则save()该对象

4) 如果对象的标识符具有分配给新实例化的对象的值,则 save() 该对象

希望这对您有帮助!

关于java - 更新功能像我的添加功能一样工作(Spring,Hibernate,mvc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22401753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com