Hibernate在使用EJB时试图将null添加到ID中

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

我正在使用实体管理器进行持久化

若我在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.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;
    }