代码之家  ›  专栏  ›  技术社区  ›  codebot

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

  •  1
  • codebot  · 技术社区  · 8 年前

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

    帖子.java

    @OneToMany(mappedBy = "post")
    private List<PostText> postBody;
    

    帖子文本.java

    @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();
        }
    }
    

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

    1 回复  |  直到 8 年前
        1
  •  0
  •   Fransechka Margarethe    8 年前

    是否使用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);*/
        }