Ramy670
Ramy670

Reputation: 81

Cannot insert the value NULL into column 'id', table 'XXX'; column does not allow nulls. INSERT fails, despite using GenerationType.IDENTITY

Here is my User class:

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name = "Users")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;
    @Column(name = "Email", unique = true, nullable = false)
    private String email;
    @Column(name = "FName")
    private String firstName;
    @Column(name = "LName")
    private String lastName;
    @Column(name = "Password")
    private String password;
    //Rest of class including setters and getters for Id
}

Here is my table definition:

enter image description here

And here is how I am trying to persist my object:

public class MainToTest {
    public static void main(String[] args) {
        Session session= dbSingelton.getSessionFactory().openSession();
        User usr=new User ( "email",  "firstName",  "lastName",  "password");
        session.persist(usr);
        session.flush();
    }   
}

I tried both making the constructor set Id to 0, as well as leave it without setting its value (Which I guess means it remains null), in both cases I got the same exception.

Here is the full stack trace:

ERROR: Cannot insert the value NULL into column 'id', table 'SocialDB.dbo.Users'; column does not allow nulls. INSERT fails.
org.hibernate.exception.ConstraintViolationException: could not execute statement

at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3556)
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:97)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:453)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:345)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1218)
at db.MainToTest.main(MainToTest.java:26)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'id', table 'SocialDB.dbo.Users'; column does not allow nulls. INSERT fails.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:308)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
... 11 more

Upvotes: 1

Views: 2145

Answers (2)

Christian Beikov
Christian Beikov

Reputation: 16400

What you are posting here is not a table definition in SQL DDL but an image. As far as I can tell from it though, the id column is not marked as "identity" as required by SQL Server, so this is why you are seeing the error.

Upvotes: 1

Preeti
Preeti

Reputation: 222

Looks like dupe of Hibernate @GeneratedValue null error for primary key

Try using the default strategy i.e. GenerationType.AUTO.

Upvotes: 0

Related Questions