Java 插入元素(主键)时出错

Java 插入元素(主键)时出错,java,web-services,jpa,playframework,playframework-1.x,Java,Web Services,Jpa,Playframework,Playframework 1.x,我的play framework配置有一个问题,当我插入新的通知时,我收到了错误。我不知道为什么会发生这个错误。因为我扩展了Model类,所以Play必须为每一行生成一个新的ID 如果你能告诉我问题出在哪里,或者用其他更好的方法来解决这个问题,也许我可以扩展GenericModel,然后编写这样注释的代码: // @Id // @GeneratedValue(strategy = GenerationType.AUTO) // public long id; 但如果我这样做,我必须如何插入新行

我的play framework配置有一个问题,当我插入新的
通知时,我收到了错误。我不知道为什么会发生这个错误。因为我扩展了
Model
类,所以Play必须为每一行生成一个新的ID

如果你能告诉我问题出在哪里,或者用其他更好的方法来解决这个问题,也许我可以扩展
GenericModel
,然后编写这样注释的代码:

// @Id
// @GeneratedValue(strategy = GenerationType.AUTO)
// public long id;
但如果我这样做,我必须如何插入新行

非常感谢


发现错误:

发生PersistenceException
org.hibernate.hibernateeException
:数据库未返回任何本机生成的标识值

这是
/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 {
    ...
}
我认为错误在于:

发生PersistenceException
org.hibernate.hibernateeException
:数据库未返回任何本机生成的标识值

发生的原因是数据库中没有序列。如果您为您的模型扩展了
模型
类,并且您处于开发模式,请播放!框架在名为
hibernate\u sequence
的数据库上自动生成序列。序列用于为您的模型生成ID。您可以检查数据库以确保序列存在

如果存在
hibernate\u序列
,您可以像以前一样插入数据:

Notificacion notificacion = new Notificacion(
      filasConfiguracionClientes.get(i).imeiadmin,imei, "bateria baja"
).save();
然后,应解决上述错误


注: 如果您使用了PostgreSQL数据库,我指的是这个答案。如果使用其他数据库,如MySQL,则应在ID列上定义
AUTO_INCREMENT
,作为序列定义


更新-我已经尝试了H2 DB设置 使用
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
控制员: 模型: 我认为错误在于:

发生PersistenceException
org.hibernate.hibernateeException
:数据库未返回任何本机生成的标识值

发生的原因是数据库中没有序列。如果您为您的模型扩展了
模型
类,并且您处于开发模式,请播放!框架在名为
hibernate\u sequence
的数据库上自动生成序列。序列用于为您的模型生成ID。您可以检查数据库以确保序列存在

如果存在
hibernate\u序列
,您可以像以前一样插入数据:

Notificacion notificacion = new Notificacion(
      filasConfiguracionClientes.get(i).imeiadmin,imei, "bateria baja"
).save();
然后,应解决上述错误


注: 如果您使用了PostgreSQL数据库,我指的是这个答案。如果使用其他数据库,如MySQL,则应在ID列上定义
AUTO_INCREMENT
,作为序列定义


更新-我已经尝试了H2 DB设置 使用
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
控制员: 模型:
我发现了错误!!我只需添加super()在构造函数内部。 谢谢你,Iwawi

模型:

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

我发现了错误!!我只需添加super()在构造函数内部。 谢谢你,Iwawi

模型:

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

你能重新格式化一下使它可读吗?例如,删除行号。你能重新格式化一下以使其可读吗?例如,删除行号。您好,非常感谢您的回答,我现在使用systme文件服务器,就像使用数据库一样,我使用conf文件中的开发模式,但错误不会消失。我不知道在哪里可以启用hibernate\u序列。我将为生产做一个MySQL数据库,但为了开发,我会预先输入文件系统进行测试。当我要做一个MySQL数据库时,我必须在哪里定义自动增量?谢谢您是使用
SQLite
还是
H2
数据库进行开发?我不熟悉
SQLite
,但是,如果像这样使用内存中的数据库,并使用
Model
而不是
GenericModel
扩展模型(
Notification.java
),则不会出现错误。序列将自动生成。然后,对于
MySQL
自动增量配置,您应该遵循以下步骤。希望它能帮助你。是的,我使用H2数据库进行开发,我扩展了我的
模型
通知。java
带有模型,没有其他ID,只有自动生成的ID,但错误继续出现。这很奇怪。非常感谢您抽出时间。好的,请。我不知道为什么这个错误。。。很奇怪。。。发布你的代码,我现在就试试,然后告诉你结果。谢谢!你好我已经解决了这个问题!!!你不会相信的!!我忘了在构造函数的第一个部分添加super()。。。我加上这个,问题就解决了!非常感谢你的帮助!!你想喝的时候,我请你喝两杯啤酒!您好,非常感谢您的回答,我现在使用的systme文件服务器就像一个数据库,我使用的是conf文件中的开发模式,但错误不会消失。我不知道在哪里可以启用hibernate\u序列。我将为生产做一个MySQL数据库,但为了开发,我会预先输入文件系统进行测试。当我要做一个MySQL数据库时,我必须在哪里定义自动增量?谢谢您是使用
SQLite
还是
H2
数据库进行开发?我不熟悉
SQLite
,但是,如果像这样使用内存中的数据库,并使用
Model
而不是
GenericModel
扩展模型(
Notification.java
),则不会出现错误。序列将自动生成。然后,对于
MyS