Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ebean Java Play中自动向引用表添加数据?_Java_Playframework 2.0_Ebean - Fatal编程技术网

如何在Ebean Java Play中自动向引用表添加数据?

如何在Ebean Java Play中自动向引用表添加数据?,java,playframework-2.0,ebean,Java,Playframework 2.0,Ebean,我有一张多对一的桌子。然后我尝试通过控制器向数据库添加数据。在我的例子中,有两个模型名为 Post.java @OneToMany(mappedBy = "post") private List<PostText> postBody; @ManyToOne(fetch = FetchType.LAZY) @JoinTable(name="post") @JoinColumn(name = "post_id", referencedColumnName = "post_id") @N

我有一张多对一的桌子。然后我尝试通过控制器向数据库添加数据。在我的例子中,有两个模型名为

Post.java

@OneToMany(mappedBy = "post")
private List<PostText> postBody;
@ManyToOne(fetch = FetchType.LAZY)
@JoinTable(name="post")
@JoinColumn(name = "post_id", referencedColumnName = "post_id")
@NotNull
private Post post;
要插入我尝试过的数据

@BodyParser.Of(BodyParser.Json.class)
public Result add() {
    JsonNode jsonNode = request().body().asJson();

    User user = userDAO.findByUsername(jsonNode.findPath(StringLiterals.USERNAME_KEY).textValue());
    if (user == null) {
        return badRequest(JSONService.toJsonNode(new ResponseWrapper<>(
                jsonNode.findPath(StringLiterals.USERNAME_KEY).textValue()
                        .concat(ResponseMessages.USER_NOT_FOUND), null)));
    }
    Transaction transaction = Ebean.beginTransaction();

    try {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

        Post post = objectMapper.treeToValue(jsonNode, Post.class);
        post.setUser(user);

        // Use JDBC batch API with a batch size of 100
        transaction.setBatchSize(4);

        // Don't bother getting generated keys
        transaction.setBatchGetGeneratedKeys(false);

        // Skip cascading persist
        transaction.setPersistCascade(false);

        postDao.add(post);
        this.post = post;
        Ebean.commitTransaction();

        return ok("Done");
    } catch (IOException e) {
        return badRequest(e.getLocalizedMessage());
    } finally {
        Ebean.endTransaction();
    }
}
@BodyParser.Of(BodyParser.Json.class)
公共结果添加(){
JsonNode JsonNode=request().body().asJson();
User User=userDAO.findByUsername(jsonNode.findPath(StringLiterals.USERNAME\u KEY.textValue());
if(user==null){
返回badRequest(JSONService.toJsonNode)(新的响应包装器(
jsonNode.findPath(StringLiterals.USERNAME\u KEY).textValue()
.concat(ResponseMessages.USER_未找到),null);
}
事务处理=Ebean.beginTransaction();
试一试{
ObjectMapper ObjectMapper=新的ObjectMapper();
enable(反序列化功能。接受单个值作为数组);
Post Post=objectMapper.treeToValue(jsonNode,Post.class);
post.setUser(用户);
//使用批处理大小为100的JDBC批处理API
交易规模(4);
//不必费心获取生成的密钥
事务处理.setBatchGetGeneratedKeys(false);
//跳过级联保持
transaction.setPersistCascade(false);
postDao.add(post);
this.post=post;
Ebean.commitTransaction();
返回ok(“完成”);
}捕获(IOE异常){
返回错误请求(如getLocalizedMessage());
}最后{
Ebean.endTransaction();
}
}

这仅适用于仅在
post
表中添加数据。它不会将数据添加到
post_text
表中。如何使用E-bean将数据添加到两个表中?

是否使用EBEAN?如果是这样,为什么要使用大量代码? 要使用添加数据,请执行以下操作:

  public Result save() {

        Form<Computer> computerForm = formFactory.form(Computer.class).bindFromRequest();
        if(computerForm.hasErrors()) 
            {return badRequest(views.html.computers.createForm.render(AuthorisedUser.findByEmail(request().username()), computerForm));}


        try 
        {
            Computer computerData = computerForm.get();

            Computer computer = new Computer();

            computer.name = computerData.name;
            computer.active = computerData.active;
            computer.status = computerData.status;
            computer.introduced = computerData.introduced;

            computer.save();
            flash("success", "Computer [ " + computerForm.get().name + " ] has been created");

        return GO_HOME;


        } 
        catch (Exception e) 
        {
            Logger.error("add.computer.save error", e);
            flash("erreur", "Computer [ " + computerForm.get().name + " ] has not been created");
        }   


        return GO_HOME;

        /*String refererUrl = request().getHeader("referer");
        return redirect(refererUrl);*/
    }
公共结果保存(){
Form computerForm=formFactory.Form(Computer.class).bindFromRequest();
if(computerForm.hasErrors())
{返回badRequest(views.html.computers.createForm.render(authorizedUser.findByEmail(request().username()),computerForm));}
尝试
{
Computer computerData=computerForm.get();
计算机=新计算机();
computer.name=computerData.name;
computer.active=computerData.active;
computer.status=computerData.status;
computer.imported=computerData.imported;
computer.save();
flash(“成功”,“已创建计算机[“+computerForm.get().name+”);
回家;
} 
捕获(例外e)
{
Logger.error(“add.computer.save error”,e);
闪存(“erreur”,“尚未创建计算机[“+computerForm.get().name+”);
}   
回家;
/*字符串refererUrl=request().getHeader(“referer”);
返回重定向(refererUrl)*/
}

您正在使用EBEAN吗?如果是这样,为什么要使用大量代码? 要使用添加数据,请执行以下操作:

  public Result save() {

        Form<Computer> computerForm = formFactory.form(Computer.class).bindFromRequest();
        if(computerForm.hasErrors()) 
            {return badRequest(views.html.computers.createForm.render(AuthorisedUser.findByEmail(request().username()), computerForm));}


        try 
        {
            Computer computerData = computerForm.get();

            Computer computer = new Computer();

            computer.name = computerData.name;
            computer.active = computerData.active;
            computer.status = computerData.status;
            computer.introduced = computerData.introduced;

            computer.save();
            flash("success", "Computer [ " + computerForm.get().name + " ] has been created");

        return GO_HOME;


        } 
        catch (Exception e) 
        {
            Logger.error("add.computer.save error", e);
            flash("erreur", "Computer [ " + computerForm.get().name + " ] has not been created");
        }   


        return GO_HOME;

        /*String refererUrl = request().getHeader("referer");
        return redirect(refererUrl);*/
    }
公共结果保存(){
Form computerForm=formFactory.Form(Computer.class).bindFromRequest();
if(computerForm.hasErrors())
{返回badRequest(views.html.computers.createForm.render(authorizedUser.findByEmail(request().username()),computerForm));}
尝试
{
Computer computerData=computerForm.get();
计算机=新计算机();
computer.name=computerData.name;
computer.active=computerData.active;
computer.status=computerData.status;
computer.imported=computerData.imported;
computer.save();
flash(“成功”,“已创建计算机[“+computerForm.get().name+”);
回家;
} 
捕获(例外e)
{
Logger.error(“add.computer.save error”,e);
闪存(“erreur”,“尚未创建计算机[“+computerForm.get().name+”);
}   
回家;
/*字符串refererUrl=request().getHeader(“referer”);
返回重定向(refererUrl)*/
}