Update() 方法在带有 h2 数据库的 Play Framework 中不起作用

Posted

技术标签:

【中文标题】Update() 方法在带有 h2 数据库的 Play Framework 中不起作用【英文标题】:Update() method doesn't work in Play Framework with h2 database 【发布时间】:2020-01-28 18:40:11 【问题描述】:

我正在尝试更新我在 Play Framework 中创建的公司类的列表。 一切正常,直到我到达 company.update(),它并没有按应有的方式保存到数据库中。

这是我的公司课程:

package models;

import io.ebean.Finder;
import io.ebean.Model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Company extends Model 
    @Id
    public Integer id;
    public String code;
    public String name;
    public String adress;
    public String fiscalCode;
    public String bankAccount;

    public static Finder<Integer, Company> find = new Finder<>(Company.class);


    public String getFiscalCode() 
        return fiscalCode;
    

    public void setFiscalCode(String fiscalCode) 
        this.fiscalCode = fiscalCode;
    

    public String getBankAccount() 
        return bankAccount;
    

    public void setBankAccount(String bankAccount) 
        this.bankAccount = bankAccount;
    

    public Integer getId() 
        return id;
    

    public void setId(Integer id) 
        this.id = id;
    

    public String getCode() 
        return code;
    

    public void setCode(String code) 
        this.code = code;
    

    public String getName() 
        return name;
    

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

    public String getAdress() 
        return adress;
    

    public void setAdress(String adress) 
        this.adress = adress;
    


这是我的更新和编辑方法:

public Result editCompany(Integer id)

        Company company = Company.find.byId(id);
        if(company == null)
        
            return notFound("Company not found");
        
        Form<Company> companyForm = formFactory.form(Company.class).fill(company);
        return ok(editCompany.render(companyForm));
    

    public Result updateCompany()
        Form<Company> companyForm = formFactory.form(Company.class).bindFromRequest();
        if(companyForm.hasErrors())
        
            flash("danger","Please Correct the Form Below");
            return badRequest(editCompany.render(companyForm));
        
        Company newcompany = companyForm.get();
        Company company = Company.find.byId(newcompany.id);
        if (company == null) 
            flash("danger", "Book not found");
            redirect(routes.CompanyController.indexCompanies());
        
        company.code = newcompany.code;
        company.name = newcompany.name;
        company.adress = newcompany.adress;
        company.fiscalCode = newcompany.fiscalCode;
        company.bankAccount = newcompany.bankAccount;
        company.update();
        flash("success","Company Details Updated Successfully");
        return redirect(routes.CompanyController.indexCompanies());
    

新的公司实体有更新的值,但它们没有保存在数据库中。我通过打印到控制台 company.name 进行了检查。

我希望你能帮助我。谢谢!

【问题讨论】:

你的ebean正常工作吗?你已经打开了 ebean 包和 jdbclog 的日志记录? 【参考方案1】:

我好像明白了。 使用 getter 和 setter 并重新编译后,问题就消失了。因此,

company.code = newcompany.code;
company.name = newcompany.name;
company.adress = newcompany.adress;
company.fiscalCode = newcompany.fiscalCode;
company.bankAccount = newcompany.bankAccount;

变成

company.setCode(newcompany.getCode());
company.setName(newcompany.getName());
company.setAdress(newcompany.getAdress());
company.setFiscalCode(newcompany.getFiscalCode());
company.setBankAccount(newcompany.getBankAccount());

【讨论】:

以上是关于Update() 方法在带有 h2 数据库的 Play Framework 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

H2:打开连接,更新,关闭连接,现在我所有的更改都消失了吗?

在数据库中使用带有 H2 的 Hibernate 时出错

带有 h2 嵌入式数据库的 MySQL LONGTEXT

在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序

java基础4:深入理解final关键字

带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接