0
我有兩個與OneToOne關係的模型。當我插入時,沒有問題,但是當我更新主模型時,它會在第二個模型中創建一個新行。播放框架 - 更新表與關係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我不應該需要這樣做。
請在控制器代碼中顯示更新第一個模型(Nodo)的代碼,我只能看到Empersa。 – arbuzz
但是,如果是這樣。這個級聯。僅對主模型不夠? – JohnPortella
不,我需要知道你如何更新你的實體。例如: 'Nodo nodo = Nodo.find.where.eq(「id」,1).findUnique(); nodo.smtn + = 1; nodo.save();' 也許在你更新模型的代碼中,而不是在模型實現中的問題。 – arbuzz