Playframework Play Framework-使用关系OneTONE更新表

Playframework Play Framework-使用关系OneTONE更新表,playframework,playframework-2.0,one-to-one,ebean,Playframework,Playframework 2.0,One To One,Ebean,我有两个模型有一对一的关系。插入时没有问题,但当我更新主模型时,它会在第二个模型中创建一个新行 我的模特 初级的 public class Nodo extends Model { @Id private int id; @Valid @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="GP_ID") private GeoPunto geopunto; 次要的 @Entity @Ta

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

我的模特

初级的

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

但是我认为使用ORM我不需要这样做。

我认为问题是因为您使用
submitForm.get()
获取Empersa模型。也许您需要调试代码或添加日志,但我的假设是您的
\u empersa.geopto
submitForm.get()
之后没有id。您评估
.save()
,ORM更新empersa,然后发现geopto没有id并进行插入


如果您想要一个允许用户编辑empersa的页面,您需要在那里传递
empersa
geopto
的ID,如果用户从该页面提交,这两个ID将传递到
editarEmpersa()
方法中。在这里,您只传递
empersa
的id,您需要与
geopto

相同的逻辑。请显示更新第一个型号(Nodo)的代码,在控制器代码中,我只能看到empersa。但如果是。这个瀑布。不仅仅是主模型不够吗?不,我需要知道如何更新实体。例如:
Nodo Nodo=Nodo.find.where.eq(“id”,1.findUnique();nodo.smtn+=1;nodo.save()可能是更新模型的代码中的问题,而不是模型实现中的问题。我忘了说EMPRESA扩展了NODO,这就是为什么我放置EMPRESA的控制器。
@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();


    }