Hibernate在使用EJB时试图将null添加到ID中
我正在使用实体管理器进行持久化 若我在Java应用程序中单独使用JPA,那个么它可以正常工作,但当我尝试运行EJB时,我得到了以下结果Hibernate在使用EJB时试图将null添加到ID中,hibernate,jpa,null,ejb,persistence,Hibernate,Jpa,Null,Ejb,Persistence,我正在使用实体管理器进行持久化 若我在Java应用程序中单独使用JPA,那个么它可以正常工作,但当我尝试运行EJB时,我得到了以下结果 Hibernate: insert into public.student (id, country, student_name) values (null, ?, ?) 为什么它试图在id中添加null 学生班 package com.ejb.entities; import java.io.Serializable; import javax.pers
Hibernate: insert into public.student (id, country, student_name) values (null, ?, ?)
为什么它试图在id中添加null
学生班
package com.ejb.entities;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* <p>
* Pojo mapping TABLE public.student
* </p>
*
* <p>
* Generated at Wed May 08 11:27:00 BST 2013
* </p>
*
* @author Salto-db Generator v1.0.16 / EJB3
*
*/
@Entity
@Table(name = "student", schema = "public")
@SuppressWarnings("serial")
public class Student implements Serializable {
/**
* Attribute id.
*/
private Integer id;
/**
* Attribute studentName.
*/
private String studentName;
/**
* Attribute country.
*/
private String country;
/**
* @return id
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
@Basic(optional = false)
public Integer getId() {
return id;
}
/**
* @param id
* new value for id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return studentName
*/
@Basic
@Column(name = "student_name", length = 2147483647)
public String getStudentName() {
return studentName;
}
/**
* @param studentName
* new value for studentName
*/
public void setStudentName(String studentName) {
this.studentName = studentName;
}
/**
* @return country
*/
@Basic
@Column(name = "country", length = 2147483647)
public String getCountry() {
return country;
}
/**
* @param country
* new value for country
*/
public void setCountry(String country) {
this.country = country;
}
}
POSTGRES表
CREATE TABLE student
(
id integer NOT NULL DEFAULT nextval('student_sequence'::regclass),
student_name text,
country text,
CONSTRAINT student_pkey PRIMARY KEY (id)
)
问题可能与GenerationType.AUTO有关,请尝试改用GenerationType.TABLE,您可以找到更多信息,您需要以如下所示的方式使用它
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq-gen")
@SequenceGenerator(name="seq-gen", sequenceName="student_sequence", initialValue=25, allocationSize=12)
@Basic(optional = false)
public Integer getId() {
return id;
}
这个问题的答案是我自己的错误,因为我没有在数据库中正确创建tabel
CREATE TABLE student
(
id integer NOT NULL DEFAULT nextval('student_sequence'::regclass),
student_name text,
country text,
CONSTRAINT student_pkey PRIMARY KEY (id)
)
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq-gen")
@SequenceGenerator(name="seq-gen", sequenceName="student_sequence", initialValue=25, allocationSize=12)
@Basic(optional = false)
public Integer getId() {
return id;
}