Play Framework - 使用OneToOne关系更新表

时间:2013-11-14 11:50:47

标签: playframework playframework-2.0 one-to-one ebean

我有两个与OneToOne关系的模型。插入时没问题,但是当我更新主模型时,它会在第二个模型中创建一个新行。

我的模特。

主要

public class Nodo extends Model {

    @Id
    private int id;

    @Valid
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="GP_ID")
    private GeoPunto geopunto;

二次

@Entity
@Table(name="GeoPuntos")
public class GeoPunto extends Model{

    @Id
    private int id;

我的控制器:

public static Result editarEmpresa(Integer id){
        if(!Secured.permiso()){
            return ok(e403.render());
        }

        Form<Empresa> submitForm = empresaForm.bindFromRequest();
        if (submitForm.hasErrors()) return badRequest(nueva_empresa.render(submitForm));
        Empresa _empresa = submitForm.get();
        _empresa.setId(id);

        _empresa.update(Integer.parseInt(id + ""));

        Form<Empresa> empresaForm = form(Empresa.class).fill(_empresa);
        return ok(empresa.render(_empresa, empresaForm));
    }

我希望你能帮助我。

更新

我不得不覆盖UPDATE方法

@Override
    public void update() {
        String queryString = "UPDATE GEOPUNTOS SET " +
                " latitud = :lat," +
                " longitud = :long" +
                " where  id = :id";
        SqlUpdate query = Ebean.createSqlUpdate(queryString).setParameter("lat", this.getGeopunto().getLatitud())
                .setParameter("long", this.getGeopunto().getLongitud()).setParameter("id", this.getGeopunto().getId());

        int rows = query.execute();

        queryString = "UPDATE NODOS SET " +
                " direccion_referencial = :dr," +
                " ruc = :ruc, " +
                " nombre = :nom " +
                " where id = :id";

        query = Ebean.createSqlUpdate(queryString).setParameter("dr",this.getDireccionReferencial())
                .setParameter("ruc",this.getRuc()).setParameter("nom",this.getNombre())
                .setParameter("id", this.getId());

        rows = query.execute();


    }

但我认为使用ORM我不应该这样做。

1 个答案:

答案 0 :(得分:1)

我认为这个问题是因为您使用submitForm.get()获取了Empersa模型。也许您需要调试代码或添加日志记录以确保,但我的假设是_empersa.geopunto之后的submitForm.get()没有ID。您评估.save(),ORM更新Empersa,然后发现geopunto没有id并进行插入。

如果你想要一个允许用户编辑empersa的页面,你需要在那里传递empersageopunto的id,如果用户从该页面提交这两个id传递给{{1 }} 方法。在这里,您只传递editarEmpersa()的ID,您需要empersa的相同逻辑。