java - 为什么我的 Play 框架模型作为空白记录保存到数据库中?

标签 java postgresql playframework

我是 Java 的新手,正在使用 Play 框架开发基于 Web 的项目。这是一次很棒的学习经历,我已经能够找到大多数问题的解决方案,但我仍然坚持将模型保存到数据库。

我正在使用框架版本 2.3.4 和本地运行的 postgresql 数据库。连接很好,但是当我在我的对象(报纸)上使用 .save() 方法时,保存了一条空白记录,只有 ID 字段有任何数据。该表单似乎具有由请求绑定(bind)的值就好了。为什么这个不能保存?

我已经搜索过答案,但似乎没有人遇到过这个问题。

我注意到序列生成的 ID 并不总是使用下一个数字(跳过 20 左右),即使我在本地运行并且是唯一的用户?这可能是某人的线索......

这是模型:

package models;

import java.util.*;
import javax.persistence.*;

import play.mvc.*;

import play.db.ebean.Model;
import play.data.validation.*;

/**
 * Newspaper entity managed by Ebean
 */
@Entity
public class Newspaper extends Model {

private static final long serialVersionUID = -4004723260163933009L;

@Id
@GeneratedValue(generator="newspaper_seq")
@SequenceGenerator(name="newspaper_seq", allocationSize=1)
public Long id;

public String name;

public Long rate;

/**
 * Generic query helper for entity Newspaper with id Long
 */
public static Model.Finder<Long,Newspaper> find = new Model.Finder<Long,Newspaper>(Long.class, Newspaper.class);

public static Map<String,String> options() {
    LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();
    for(Newspaper c: Newspaper.find.orderBy("name").findList()) {
        options.put(c.id.toString(), c.name);
    }
    return options;
}

还有我的 Controller 类:

package controllers;


import play.*;

import play.mvc.*;


import views.html.*;

import models.Newspaper;

//import play.api.data.Form; 

import play.data.Form;

public class Application extends Controller{

/**
 * @param args
 */
public static Result index() {
    return ok(views.html.index.render("list of newspapers"));

}

public static Result addNewspaper() {
    Form<Newspaper> form = Form.form(Newspaper.class).bindFromRequest();
    //return ok(form.toString()); 
    if(form.hasErrors()) {
        return badRequest("something didn't work");
    }
    String oldForm = form.toString();
    Newspaper paper = form.get();
    paper.save();


// checking value        return ok(oldForm + "\n" + form.toString() + "\n" + paper.toString());
  return redirect(routes.Application
          .index()); 
}


}

这是我创建表的 SQL(第一次使用 postgresql,所以这可能是错误的)

create table newspaper (
id                        bigint not null,
name                      varchar(255),
rate                      bigint,
constraint pk_newspaper primary key (id))
;

create sequence newspaper_seq;

感谢您的宝贵时间!

---更新--- 我开始了 sql 调试,我在终端中看到了这个错误:

[debug] c.j.b.PreparedStatementHandle - insert into newspaper (id, name, rate) values (101,'[SQL NULL of type 12]','[SQL NULL of type -5]')

由于某种原因,这些值是 NULL(不同类型?),但是当我输出表单的 .toString 值时,它似乎显示了正确的数据:

Form(of=class models.Newspaper, data={name=Toledo Blade, rate=10}, value=Some(models.Newspaper@2df64761), errors={})

数据不会传递到报纸模型的任何原因?

最佳答案

好的 - 所以我在 another question 上找到了答案.我想我没有使用正确的搜索词:( 无论如何,我必须在终端的项目目录中输入 activator clean。之后它工作正常。希望这可以节省其他人数小时的挫败感!

关于java - 为什么我的 Play 框架模型作为空白记录保存到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789008/

相关文章:

django - 从Docker连接Postgres

scala - 面对 Play2.x 和新的 newRelic javaagent 的问题

mysql - Slick - MySQL 语法错误

java - 查看字段是否已映射

python - Postgres 和 Docker 在文件更改时重新部署

json - 如何使用 PostgreSQL 更新 jsonb 字符串?

database - 如何在 Play 2.0 中为每个环境设置不同的数据库?

java - 在 Docker 容器中运行 Spring Boot 应用程序

java - 从 xml 获取 img 标签

java - Jackson:无法使用嵌套 DTO 处理托管/反向引用 'defaultReference'