Quantcast
Channel: Java Programming Forum - Learn Java Programming - Hibernate
Viewing all articles
Browse latest Browse all 76

Unable to insert rows

$
0
0
I able to generate the schema but when I try to insert, I am getting the error com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Column 'id' cannot be null. My Phone table primary key is a composite key consisting of phoneNumber and foreign key id.

I have my classes as below

Student.java

Code:

import java.io.Serializable; 
import java.util.Set; 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToMany; 
 
@Entity 
@SuppressWarnings("serial") 
public class Student implements Serializable { 
 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int id; 
 
private String fName; 
 
private String lName; 
 
private String mname; 
 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "id") 
private Set<Phone> phones; 
 
/**
* @return the fName
*/ 
public String getfName() { 
    return fName; 

 
/**
* @return the id
*/ 
public int getId() { 
    return id; 

 
/**
* @return the lName
*/ 
public String getlName() { 
    return lName; 

 
/**
* @return the mname
*/ 
public String getMname() { 
    return mname; 

 
/**
* @return the phones
*/ 
public Set<Phone> getPhones() { 
    return phones; 

 
/**
* @param fName
*            the fName to set
*/ 
public void setfName(final String fName) { 
    this.fName = fName; 

 
/**
* @param id
*            the id to set
*/ 
public void setId(final int id) { 
    this.id = id; 

 
/**
* @param lName
*            the lName to set
*/ 
public void setlName(final String lName) { 
    this.lName = lName; 

 
/**
* @param mname
*            the mname to set
*/ 
public void setMname(final String mname) { 
    this.mname = mname; 

 
/**
* @param phones
*            the phones to set
*/ 
public void setPhones(final Set<Phone> phones) { 
    this.phones = phones; 

 
}

Phone.java

Code:

import java.io.Serializable; 
 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.IdClass; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
 
@IdClass(PhonePK.class) 
@Entity 
@SuppressWarnings("serial") 
public class Phone implements Serializable { 
 
@Id 
private String phoneNumber; 
 
@Id 
@ManyToOne 
@JoinColumn(name = "id", insertable = false, updatable = false) 
private Student student; 
 
private String color; 
 
/**
* @return the color
*/ 
public String getColor() { 
    return color; 

 
/**
* @return the phoneNumber
*/ 
public String getPhoneNumber() { 
    return phoneNumber; 

 
/**
* @return the student
*/ 
public Student getStudent() { 
    return student; 

 
/**
* @param color
*            the color to set
*/ 
public void setColor(final String color) { 
    this.color = color; 

 
/**
* @param phoneNumber
*            the phoneNumber to set
*/ 
public void setPhoneNumber(final String phoneNumber) { 
    this.phoneNumber = phoneNumber; 

 
/**
* @param student
*            the student to set
*/ 
public void setStudent(final Student student) { 
    this.student = student; 

 
}

PhonePK.java

Code:

import java.io.Serializable; 
 
@SuppressWarnings("serial") 
public class PhonePK implements Serializable { 
 
private String phoneNumber; 
 
private Student student; 
 
/**
* @return the phoneNumber
*/ 
public String getPhoneNumber() { 
    return phoneNumber; 

 
/**
* @return the student
*/ 
public Student getStudent() { 
    return student; 

 
/**
* @param phoneNumber
*            the phoneNumber to set
*/ 
public void setPhoneNumber(final String phoneNumber) { 
    this.phoneNumber = phoneNumber; 

 
/**
* @param student
*            the student to set
*/ 
public void setStudent(final Student student) { 
    this.student = student; 

 
}

hibernate.cfg.xml

Code:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.connection.password">pwd</property> 
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> 
<property name="hibernate.connection.username">user</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
<property name="connection.pool_size">1</property> 
<property name="show_sql">true</property> 
<property name="hbm2ddl.auto">create</property> 
<property name="hibernate.show_sql">true</property> 
 
</session-factory> 
</hibernate-configuration>

Main.java

Code:

import java.util.LinkedHashSet; 
import java.util.Set; 
 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
 
public class Main { 
 
    public static void main(final String args[]) { 
         
        Configuration configuration = new Configuration(); 
        Transaction transaction = null; 
         
        configuration.addAnnotatedClass(Student.class); 
        configuration.addAnnotatedClass(Phone.class); 
        configuration.addAnnotatedClass(PhonePK.class); 
        configuration.configure("hibernate.cfg.xml"); 
 
        SessionFactory sessionFactory = configuration.buildSessionFactory(); 
 
        Session session = sessionFactory.openSession(); 
         
 
        Student student = new Student(); 
        student.setfName("Bob"); 
        student.setlName("Buster"); 
        Set<Phone> phones = new LinkedHashSet<Phone>(); 
        Phone ph1 = new Phone(); 
        ph1.setColor("Black"); 
        ph1.setPhoneNumber("1111111111"); 
 
        Phone ph2 = new Phone(); 
        ph2.setColor("Blue"); 
        ph2.setPhoneNumber("2222222222"); 
        phones.add(ph1); 
        phones.add(ph2); 
 
        student.setPhones(phones); 
         
        try { 
            transaction = session.beginTransaction(); 
            session.save(student); 
            transaction.commit(); 
        } catch (HibernateException e) { 
            transaction.rollback(); 
            e.printStackTrace(); 
        } finally { 
            session.close(); 
        } 
         
            } 
}


Console output

Code:

Jun 29, 2013 11:22:49 AM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
Jun 29, 2013 11:22:49 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.2.Final}
Jun 29, 2013 11:22:49 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Jun 29, 2013 11:22:49 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Jun 29, 2013 11:22:49 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: hibernate.cfg.xml
Jun 29, 2013 11:22:49 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: hibernate.cfg.xml
Jun 29, 2013 11:22:49 AM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Jun 29, 2013 11:22:50 AM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Jun 29, 2013 11:22:50 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Jun 29, 2013 11:22:50 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 1
Jun 29, 2013 11:22:50 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
Jun 29, 2013 11:22:50 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test]
Jun 29, 2013 11:22:50 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=user, password=****}
Jun 29, 2013 11:22:51 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Jun 29, 2013 11:22:52 AM org.hibernate.mapping.RootClass checkCompositeIdentifier
WARN: HHH000038: Composite-id class does not override equals(): PhonePK
Jun 29, 2013 11:22:52 AM org.hibernate.mapping.RootClass checkCompositeIdentifier
WARN: HHH000039: Composite-id class does not override hashCode(): PhonePK
Jun 29, 2013 11:22:52 AM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
Jun 29, 2013 11:22:52 AM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Jun 29, 2013 11:22:52 AM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
Hibernate: alter table Phone drop foreign key FK_aoj0eivd0ap3drxnoyk4xj10q
Hibernate: drop table if exists Phone
Hibernate: drop table if exists Student
Hibernate: create table Phone (phoneNumber varchar(255) not null, color varchar(255), id integer not null, primary key (phoneNumber, id))
Hibernate: create table Student (id integer not null auto_increment, fName varchar(255), lName varchar(255), mname varchar(255), primary key (id))
Hibernate: alter table Phone add index FK_aoj0eivd0ap3drxnoyk4xj10q (id), add constraint FK_aoj0eivd0ap3drxnoyk4xj10q foreign key (id) references Student (id)
Jun 29, 2013 11:22:53 AM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate: insert into Student (fName, lName, mname) values (?, ?, ?)
Hibernate: select phone_.phoneNumber, phone_.id, phone_.color as color2_0_ from Phone phone_ where phone_.phoneNumber=? and phone_.id=?
Hibernate: select phone_.phoneNumber, phone_.id, phone_.color as color2_0_ from Phone phone_ where phone_.phoneNumber=? and phone_.id=?
Hibernate: insert into Phone (color, phoneNumber, id) values (?, ?, ?)
Jun 29, 2013 11:22:53 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1048, SQLState: 23000
Jun 29, 2013 11:22:53 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'id' cannot be null
org.hibernate.exception.ConstraintViolationException: could not execute statement
  at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
  at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
  at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136)
  at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58)
  at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3067)
  at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3509)
  at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88)
  at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
  at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369)
  at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286)
  at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
  at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
  at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234)
  at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)
  at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
  at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
  at Main.main(Main.java:48)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
  at java.lang.reflect.Constructor.newInstance(Unknown Source)
  at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
  at com.mysql.jdbc.Util.getInstance(Util.java:386)
  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
  at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)
  ... 14 more
Jun 29, 2013 11:22:53 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements


Viewing all articles
Browse latest Browse all 76

Latest Images

Trending Articles



Latest Images