我的播放框架配置有一个问题,当我插入一个新的Notification
时,我收到了错误。我不知道为什么会出现这个错误。因为我扩展了Model
类,Play必须为每一行生成一个新ID。
如果您可以告诉我这是什么问题,或者其他更好的方法,也许如果我扩展了GenericModel
并且我执行了这样评论的代码:
// @Id
// @GeneratedValue(strategy = GenerationType.AUTO)
// public long id;
但如果我这样做,我该如何插入新行?
非常感谢!!!!
发现错误:
发生PersistenceException :
org.hibernate.HibernateException
:数据库未返回本机生成的标识值
这是/app/controllers/WSConfiguracion.java
:
if (cliente.valorBateria < filasConfiguracionClientes.get(i).limiteBateria) {
if (!estadoNotificacion.hayNotiBateria) {
// code below generated the error
Notificacion notificacion = new Notificacion(
filasConfiguracionClientes.get(i).imeiadmin,imei, "bateria baja"
).save();
estadoNotificacion.hayNotiBateria = true;
//notificacion.save();
estadoNotificacion.save();
renderText("NOTIFICA BATERIA");
}
} else {
...
}
package models;
import javax.persistence.Entity;
import play.db.jpa.Model;
@Entity
public class Notificacion extends Model {
//@Id
//@GeneratedValue(strategy = GenerationType.AUTO)
//public long id;
//@Id
public long imeiadmin;
//@Id
public long imeiclient;
public String detalleNotificacion;
public Notificacion(long imeiadmin, long imeiclient,String detalleNotificacion) {
this.imeiadmin = imeiadmin;
this.imeiclient = imeiclient;
this.detalleNotificacion = detalleNotificacion;
}
}
答案 0 :(得分:1)
我认为错误:
发生了发生PersistenceException :
org.hibernate.HibernateException
:数据库未返回本机生成的标识值
,因为数据库中有无序列。如果您为模型扩展Model
类并且处于开发模式,则Play!Framework会自动为您的数据库生成名为hibernate_sequence
的序列。该序列用于为您的模型生成 ID 。您可以检查数据库以确保存在序列。
如果存在hibernate_sequence
,您可以像以前一样插入数据:
Notificacion notificacion = new Notificacion(
filasConfiguracionClientes.get(i).imeiadmin,imei, "bateria baja"
).save();
然后,应该解决上面的错误。
注意:
如果您使用 PostgreSQL 数据库,我指的是这个答案。如果您使用其他数据库,例如 MySQL ,则应在ID列上定义
AUTO_INCREMENT
作为序列定义。
在H2
中使用application.conf
数据库进行配置:
# Development mode
application.mode=dev
# Set simple file written database (H2 file stored)
db=fs
# JPA DDL update for development purpose only
jpa.ddl=update
public static void test15878866() {
// force to insert dummy data
Notificacion notificacion = new Notificacion(
1L, 2L, "This is new notificacion"
).save();
renderText(notificacion.detalleNotificacion);
}
@Entity
public class Notificacion extends Model {
public long imeiadmin;
public long imeiclient;
public String detalleNotificacion;
public Notificacion(long imeiadmin, long imeiclient,String detalleNotificacion) {
this.imeiadmin = imeiadmin;
this.imeiclient = imeiclient;
this.detalleNotificacion = detalleNotificacion;
}
}
答案 1 :(得分:0)
我发现了错误!!我只需要在构造函数中添加 super(); 。 谢谢大家,iwawiwi。
型号:
@Entity
public class Notificacion extends Model {
public long imeiadmin;
public long imeiclient;
public String detalleNotificacion;
public Notificacion(long imeiadmin, long imeiclient,String detalleNotificacion) {
super();
this.imeiadmin = imeiadmin;
this.imeiclient = imeiclient;
this.detalleNotificacion = detalleNotificacion;
}
}