Java 插入元素(主键)时出错
我的play framework配置有一个问题,当我插入新的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; 但如果我这样做,我必须如何插入新行
通知时,我收到了错误。我不知道为什么会发生这个错误。因为我扩展了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