我有两个与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我不应该这样做。
答案 0 :(得分:1)
我认为这个问题是因为您使用submitForm.get()
获取了Empersa模型。也许您需要调试代码或添加日志记录以确保,但我的假设是_empersa.geopunto
之后的submitForm.get()
没有ID。您评估.save()
,ORM更新Empersa,然后发现geopunto没有id并进行插入。
如果你想要一个允许用户编辑empersa的页面,你需要在那里传递empersa
和geopunto
的id,如果用户从该页面提交这两个id传递给{{1 }} 方法。在这里,您只传递editarEmpersa()
的ID,您需要empersa
的相同逻辑。