我是Java的新手,使用Play框架开发基于Web的项目。这是一次很棒的学习经历,我已经能够找到大多数问题的解决方案,但我一直坚持将模型保存到数据库中。
我正在使用框架版本2.3.4和本地运行的postgresql数据库。连接很好,但是当我在我的对象(报纸)上使用.save()方法时,只保存一个空白记录,只有ID字段有任何数据。该表单似乎具有请求绑定的值就好了。为什么不能保存?
我已经搜索了答案,但似乎没有人遇到过这个问题。
我注意到序列生成的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;
}
}
我的控制器类:
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={})
为什么数据不会传递给报纸模型?
答案 0 :(得分:2)
好的 - 所以我在another question找到了答案。我想我没有使用正确的搜索词:(
无论如何,我不得不在终端的项目目录中输入activator clean
。之后它运作良好。希望这可以节省别人的挫折时间!