package com.mckenzie;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "person")
public class Person implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
@Column(name = "CODE")
private String code;
@Column(name = "INITIALS")
private String initials;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "MIDDLE_NAME")
private String middleName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "GENDER")
private String gender;
@Column(name = "DATE_OF_BIRTH")
private Date dateOfBirth;
@Column(name = "NATIONALITY")
private String nationality;
@Column(name = "CREATED_ON")
private Timestamp createdOn;
@Column(name = "MODIFIED_ON")
private Timestamp modifiedOn;
@Column(name = "CREATED_BY")
private Long createdBy;
@Column(name = "MODIFIED_BY")
private Long modifiedBy;
@Column(name = "DELETE_FLAG")
private String deleteFlag;
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
@JoinColumn(name = "ID")
private PersonContactNumber personContactNumber;
public Person()
{
super();
}
/** @return the id */
public Long getId()
{
return id;
}
/** @param id
* the id to set */
public void setId(Long id)
{
this.id = id;
}
/** @return the code */
public String getCode()
{
return code;
}
/** @param code
* the code to set */
public void setCode(String code)
{
this.code = code;
}
/** @return the initials */
public String getInitials()
{
return initials;
}
/** @param initials
* the initials to set */
public void setInitials(String initials)
{
this.initials = initials;
}
/** @return the firstName */
public String getFirstName()
{
return firstName;
}
/** @param firstName
* the firstName to set */
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
/** @return the middleName */
public String getMiddleName()
{
return middleName;
}
/** @param middleName
* the middleName to set */
public void setMiddleName(String middleName)
{
this.middleName = middleName;
}
/** @return the lastName */
public String getLastName()
{
return lastName;
}
/** @param lastName
* the lastName to set */
public void setLastName(String lastName)
{
this.lastName = lastName;
}
/** @return the gender */
public String getGender()
{
return gender;
}
/** @param gender
* the gender to set */
public void setGender(String gender)
{
this.gender = gender;
}
/** @return the dateOfBirth */
public Date getDateOfBirth()
{
return dateOfBirth;
}
/** @param dateOfBirth
* the dateOfBirth to set */
public void setDateOfBirth(Date dateOfBirth)
{
this.dateOfBirth = dateOfBirth;
}
/** @return the nationality */
public String getNationality()
{
return nationality;
}
/** @param nationality
* the nationality to set */
public void setNationality(String nationality)
{
this.nationality = nationality;
}
/** @return the createdOn */
public Timestamp getCreatedOn()
{
return createdOn;
}
/** @param createdOn
* the createdOn to set */
public void setCreatedOn(Timestamp createdOn)
{
this.createdOn = createdOn;
}
/** @return the modifiedOn */
public Timestamp getModifiedOn()
{
return modifiedOn;
}
/** @param modifiedOn
* the modifiedOn to set */
public void setModifiedOn(Timestamp modifiedOn)
{
this.modifiedOn = modifiedOn;
}
/** @return the createdBy */
public Long getCreatedBy()
{
return createdBy;
}
/** @param createdBy
* the createdBy to set */
public void setCreatedBy(Long createdBy)
{
this.createdBy = createdBy;
}
/** @return the modifiedBy */
public Long getModifiedBy()
{
return modifiedBy;
}
/** @param modifiedBy
* the modifiedBy to set */
public void setModifiedBy(Long modifiedBy)
{
this.modifiedBy = modifiedBy;
}
/** @return the deleteFlag */
public String getDeleteFlag()
{
return deleteFlag;
}
/** @param deleteFlag
* the deleteFlag to set */
public void setDeleteFlag(String deleteFlag)
{
this.deleteFlag = deleteFlag;
}
/** @return the personContactNumber */
public PersonContactNumber getPersonContactNumber()
{
return personContactNumber;
}
/** @param personContactNumber
* the personContactNumber to set */
public void setPersonContactNumber(PersonContactNumber personContactNumber)
{
this.personContactNumber = personContactNumber;
}
/** <enter description here>
*
* <li>pre-condition <enter text> <li>post-condition <enter text>
*
* @return
*
* @author Ishan
* @createdOn Apr 19, 2014
* @modifiedOn Apr 19, 2014 */
@Override
public String toString()
{
return "Person [id=" + id + ", code=" + code + ", initials=" + initials + ", firstName=" + firstName + ", middleName=" + middleName
+ ", lastName=" + lastName + ", gender=" + gender + ", dateOfBirth=" + dateOfBirth + ", nationality=" + nationality + ", createdOn="
+ createdOn + ", modifiedOn=" + modifiedOn + ", createdBy=" + createdBy + ", modifiedBy=" + modifiedBy + ", deleteFlag=" + deleteFlag
+ ", personContactNumber=" + personContactNumber + "]";
}
}
package com.mckenzie;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
@Table(name = "person_contact_number")
public class PersonContactNumber implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
@Column(name = "PERSON_ID", insertable = false, updatable = false)
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "person"))
private Long personId;
@Column(name = "CONTACT_NUMBER")
private String contactNumber;
@Column(name = "CONTACT_TYPE")
private String contactType;
@Column(name = "CREATED_ON")
private Timestamp createdOn;
@Column(name = "MODIFIED_ON")
private Timestamp modifiedOn;
@Column(name = "CREATED_BY")
private Long createdBy;
@Column(name = "MODIFIED_BY")
private Long modifiedBy;
@Column(name = "DELETE_FLAG")
private String deleteFlag;
@OneToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
public PersonContactNumber()
{
super();
}
/** @return the id */
public Long getId()
{
return id;
}
/** @param id
* the id to set */
public void setId(Long id)
{
this.id = id;
}
/** @return the personId */
public Long getPersonId()
{
return personId;
}
/** @param personId
* the personId to set */
public void setPersonId(Long personId)
{
this.personId = personId;
}
/** @return the contactNumber */
public String getContactNumber()
{
return contactNumber;
}
/** @param contactNumber
* the contactNumber to set */
public void setContactNumber(String contactNumber)
{
this.contactNumber = contactNumber;
}
/** @return the contactType */
public String getContactType()
{
return contactType;
}
/** @param contactType
* the contactType to set */
public void setContactType(String contactType)
{
this.contactType = contactType;
}
/** @return the createdOn */
public Timestamp getCreatedOn()
{
return createdOn;
}
/** @param createdOn
* the createdOn to set */
public void setCreatedOn(Timestamp createdOn)
{
this.createdOn = createdOn;
}
/** @return the modifiedOn */
public Timestamp getModifiedOn()
{
return modifiedOn;
}
/** @param modifiedOn
* the modifiedOn to set */
public void setModifiedOn(Timestamp modifiedOn)
{
this.modifiedOn = modifiedOn;
}
/** @return the createdBy */
public Long getCreatedBy()
{
return createdBy;
}
/** @param createdBy
* the createdBy to set */
public void setCreatedBy(Long createdBy)
{
this.createdBy = createdBy;
}
/** @return the modifiedBy */
public Long getModifiedBy()
{
return modifiedBy;
}
/** @param modifiedBy
* the modifiedBy to set */
public void setModifiedBy(Long modifiedBy)
{
this.modifiedBy = modifiedBy;
}
/** @return the deleteFlag */
public String getDeleteFlag()
{
return deleteFlag;
}
/** @param deleteFlag
* the deleteFlag to set */
public void setDeleteFlag(String deleteFlag)
{
this.deleteFlag = deleteFlag;
}
/** @return the person */
public Person getPerson()
{
return person;
}
/** @param person
* the person to set */
public void setPerson(Person person)
{
this.person = person;
}
/** <enter description here>
*
* <li>pre-condition <enter text> <li>post-condition <enter text>
*
* @return
*
* @author Ishan
* @createdOn Apr 19, 2014
* @modifiedOn Apr 19, 2014 */
@Override
public String toString()
{
return "PersonContactNumber [id=" + id + ", personId=" + personId + ", contactNumber=" + contactNumber + ", contactType=" + contactType
+ ", createdOn=" + createdOn + ", modifiedOn=" + modifiedOn + ", createdBy=" + createdBy + ", modifiedBy=" + modifiedBy
+ ", deleteFlag=" + deleteFlag + ", person=" + person + "]";
}
package com.mckenzie;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class AppFactory
{
private static ServiceRegistry serviceRegistry;
private static final SessionFactory sessionFactory;
static
{
try
{
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex)
{
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
}
package com.mckenzie;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
@SuppressWarnings("unused")
public class RunExample
{
private static SessionFactory sessionFactory = null;
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
SessionFactory sf;
ServiceRegistry serviceRegistry;
Session session = null;
try
{
try
{
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sf = configuration.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex)
{
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
System.out.println("Example : Hibernate One to One Mapping using Annotation ");
session = sf.openSession();
session.beginTransaction();
PersonContactNumber personContactNumber = new PersonContactNumber();
personContactNumber.setContactNumber("2121");
personContactNumber.setContactType("home");
personContactNumber.setDeleteFlag("F");
Person person = new Person();
person.setCode("abc");
person.setInitials("Mr");
person.setFirstName("Ishan");
person.setMiddleName("T");
person.setLastName("Seth");
person.setGender("MALE");
person.setNationality("Indian");
person.setDeleteFlag("F");
person.setPersonContactNumber(personContactNumber);
session.save(person);
List<Person> persons = session.createQuery("from person").list();
for (int i = 0; i < persons.size(); i++)
System.out.println(persons.get(i));
session.getTransaction().commit();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>Done");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
finally
{
session.close();
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/mckenzie_db</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping class="com.mckenzie.Person" />
<mapping class="com.mckenzie.PersonContactNumber" />
</session-factory>
</hibernate-configuration>
DEBUG 2014-04-19 21:56:36,282 [main] (SqlExceptionHelper.java:139) (logExceptions) - could not execute statement [n/a]
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'PERSON_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:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2459)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2376)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2360)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)
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:2975)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3487)
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)
at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)
at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)
at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727)
at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:756)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:752)
at com.mckenzie.RunExample.main(RunExample.java:57)
WARN 2014-04-19 21:56:36,283 [main] (SqlExceptionHelper.java:145) (logExceptions) - SQL Error: 1048, SQLState: 23000
ERROR 2014-04-19 21:56:36,283 [main] (SqlExceptionHelper.java:147) (logExceptions) - Column 'PERSON_ID' cannot be null
could not execute statement
DEBUG 2014-04-19 21:56:36,285 [main] (LogicalConnectionImpl.java:232) (releaseConnection) - Releasing JDBC connection
DEBUG 2014-04-19 21:56:36,285 [main] (LogicalConnectionImpl.java:250) (releaseConnection) - Released JDBC connection