EJB3 error - The column in table does not allow null values

Hi,

I am using EJB3 with Jboss 4.0.5GA and Sybase. I have couple of entity beans which I want to persist.

Here is the part of the entity bean and persistence.xml..

@Entity(name = "Amendment")

@Table

public class Amendment implements Serializable {

private Long amendmentId;

private String assignedTo;

private String portfolioName;

private String shortName;

private int tradeRefNo;

@Id

@GeneratedValue

public Long getAmendmentId() {

return amendmentId;

}

// geetters and setters included

}

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence">

<persistence-unit name="amendments_ejbPU">

<description>Amendments persistence</description>

<jta-data-source>java:jdbc/dealAmendmentsDS</jta-data-source>

<class>za.co.rmb.amendments.bean.Amendment</class>

<class>za.co.rmb.amendments.bean.FieldAmendment</class>

<class>za.co.rmb.amendments.bean.xml.XPathMapping</class>

<properties>

<property name="hibernate.dialect" value="org.hibernate.dialect.SybaseDialect"/>

<property name="hibernate.hbm2ddl.auto" value="update"/>

</properties>

</persistence-unit>

</persistence>

These entities are persisted perfectly when I allow JPA to create the tables. If I create the tables using a script (with exactly same structure) it does not create the id for the tables while inserting.. :( It throws the following exception.

Caused by: javax.persistence.EntityExistsException: org.hibernate.exception.ConstraintViolationException

: could not insert: [za.co.rmb.amendments.bean.Amendment]

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerIm

pl.java:622)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)

at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.j

ava:175)

at za.co.rmb.amendments.bean.AmendmentsServiceBean.saveDealAmendment(AmendmentsServiceBean.java:

139)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)

at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)

at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.jav

a:63)

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersist

enceContextPropagationInterceptor.java:57)

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntit

yManagerInterceptor.java:54)

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46)

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)

... 47 more

Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [za.co.rmb.amendments

.bean.Amendment]

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.jav

a:40)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:20

93)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:25

73)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:47)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventLis

tener.java:290)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:

180)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListen

er.java:108)

at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventList

ener.java:131)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.jav

a:87)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.jav

a:38)

at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:212)

... 64 more

Caused by: com.sybase.jdbc2.jdbc.SybSQLException: The column amendmentId in table Amendment does not all

ow null values.

at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:2834)

at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:2156)

at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69)

at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:220)

at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:203)

at com.sybase.jdbc2.jdbc.SybStatement.executeLoop(SybStatement.java:1766)

at com.sybase.jdbc2.jdbc.SybStatement.execute(SybStatement.java:1758)

at com.sybase.jdbc2.jdbc.SybPreparedStatement.execute(SybPreparedStatement.java:619)

at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.execute(WrappedPreparedStatement.jav

a:209)

at org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.j

ava:108)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.jav

a:33)

does anyone have a work around to this problem.

Regards,

Vidya

[6767 byte] By [vidyamahavadia] at [2007-11-26 20:34:54]
# 1
HiI am also facing the same problem. Please let me know how you resolved it.my email id is abnig19atgmail.comRegardsAbhinav
abhinav_nigam19a at 2007-7-10 1:27:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 2

Why dont you print that SCRIPT here?

if I look at the trace What I found is

Caused by: com.sybase.jdbc2.jdbc.SybSQLException: The column amendmentId in table Amendment does not all

ow null values.

but ur script is probably trying to insert a null into that particular column

amendmentId in Amendment table.

Actually amendmentId in your aAmendment table is not null and you are trying to insert a null into that.

instead of null just insert some #/0/your choice value. allot me dukes and update me result as well :)

cvasu4a at 2007-7-10 1:27:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 3
what happened ?
cvasu4a at 2007-7-10 1:27:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 4

Hi,

Is your initial database the same as the generated one?

I mean, if you use a sequences table, should initial values be there? I am not sure how sybase sequences are used and what config you use for your generated PK values. It apeas that the first value can not be resolved.

Just a hint, hope it helps, Robert

robert@javixa at 2007-7-10 1:27:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 5
vidyamahavadi you should learn responding
cvasu4a at 2007-7-10 1:27:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...