Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version:
hibernate 3.2.0.cr2
hibernate-annotations 3.2.0.cr1
hibernate-entitymanager 3.2.0.cr1
spring 2.0-rc2
Mapping documents:
Code:
@Entity
@Table(name = "LS_BANNERS", uniqueConstraints = {@UniqueConstraint(columnNames = {"BANNERS_KEY"})})
public class Banner implements java.io.Serializable {
// Fields
private Long oid;
private String bannerKey;
private Integer storeId;
private Date creationTime;
private Integer status;
private Integer deleted;
private Date lastModTime;
private Integer linkType;
private String linkTarget;
private String imageFr;
private String imageDe;
private String imageEn;
private String titleFr;
private String titleDe;
private String titleEn;
private String textFr;
private String textDe;
private String textEn;
private String targetDept;
private Integer displayOrder;
private Date startDate;
private Date endDate;
private Integer noCache;
private String style;
private String sdescFr;
private String sdescDe;
private String sdescEn;
private Set<PortalPageBanner> portalPageBanners = new HashSet<PortalPageBanner>(0);
// Constructors
/** default constructor */
public Banner() {
}
// Property accessors
@Id @GeneratedValue
@Column(name = "OID", unique = true, nullable = false, insertable = true, updatable = true)
public Long getOid() {
return this.oid;
}
public void setOid(Long oid) {
this.oid = oid;
}
@Column(name = "BANNERS_KEY", unique = true, nullable = false, insertable = true, updatable = true, length = 128)
public String getBannerKey() {
return this.bannerKey;
}
public void setBannerKey(String bannersKey) {
this.bannerKey = bannersKey;
}
@Column(name = "STORE_ID", unique = false, nullable = false, insertable = true, updatable = true)
public Integer getStoreId() {
return this.storeId;
}
public void setStoreId(Integer storeId) {
this.storeId = storeId;
}
@Column(name = "CREATION_TIME", unique = false, nullable = false, insertable = true, updatable = true, length = 23)
public Date getCreationTime() {
return this.creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
@Column(name = "STATUS", unique = false, nullable = false, insertable = true, updatable = true)
public Integer getStatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
@Column(name = "DELETED", unique = false, nullable = false, insertable = true, updatable = true)
public Integer getDeleted() {
return this.deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
@Column(name = "LAST_MOD_TIME", unique = false, nullable = false, insertable = true, updatable = true, length = 23)
@Version
public Date getLastModTime() {
return this.lastModTime;
}
public void setLastModTime(Date lastModTime) {
this.lastModTime = lastModTime;
}
@Column(name = "LINK_TYPE", unique = false, nullable = true, insertable = true, updatable = true)
public Integer getLinkType() {
return this.linkType;
}
public void setLinkType(Integer linkType) {
this.linkType = linkType;
}
@Column(name = "LINK_TARGET", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getLinkTarget() {
return this.linkTarget;
}
public void setLinkTarget(String linkTarget) {
this.linkTarget = linkTarget;
}
@Column(name = "IMAGE_FR", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getImageFr() {
return this.imageFr;
}
public void setImageFr(String imageFr) {
this.imageFr = imageFr;
}
@Column(name = "IMAGE_DE", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getImageDe() {
return this.imageDe;
}
public void setImageDe(String imageDe) {
this.imageDe = imageDe;
}
@Column(name = "IMAGE_UK", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getImageEn() {
return this.imageEn;
}
public void setImageEn(String imageEn) {
this.imageEn = imageEn;
}
@Column(name = "TITLE_FR", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getTitleFr() {
return this.titleFr;
}
public void setTitleFr(String titleFr) {
this.titleFr = titleFr;
}
@Column(name = "TITLE_DE", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getTitleDe() {
return this.titleDe;
}
public void setTitleDe(String titleDe) {
this.titleDe = titleDe;
}
@Column(name = "TITLE_UK", unique = false, nullable = true, insertable = true, updatable = true, length = 256)
public String getTitleEn() {
return this.titleEn;
}
public void setTitleEn(String titleEn) {
this.titleEn = titleEn;
}
@Column(name = "TEXT_FR", unique = false, nullable = true, insertable = true, updatable = true)
public String getTextFr() {
return this.textFr;
}
public void setTextFr(String textFr) {
this.textFr = textFr;
}
@Column(name = "TEXT_DE", unique = false, nullable = true, insertable = true, updatable = true)
public String getTextDe() {
return this.textDe;
}
public void setTextDe(String textDe) {
this.textDe = textDe;
}
@Column(name = "TEXT_UK", unique = false, nullable = true, insertable = true, updatable = true)
public String getTextEn() {
return this.textEn;
}
public void setTextEn(String textEn) {
this.textEn = textEn;
}
@Column(name = "TARGET_DEPT", unique = false, nullable = true, insertable = true, updatable = true)
public String getTargetDept() {
return this.targetDept;
}
public void setTargetDept(String targetDept) {
this.targetDept = targetDept;
}
@Column(name = "DISPLAY_ORDER", unique = false, nullable = true, insertable = true, updatable = true)
public Integer getDisplayOrder() {
return this.displayOrder;
}
public void setDisplayOrder(Integer displayOrder) {
this.displayOrder = displayOrder;
}
@Column(name = "START_DATE", unique = false, nullable = false, insertable = true, updatable = true, length = 23)
public Date getStartDate() {
return this.startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
@Column(name = "END_DATE", unique = false, nullable = false, insertable = true, updatable = true, length = 23)
public Date getEndDate() {
return this.endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
@Column(name = "NO_CACHE", unique = false, nullable = true, insertable = true, updatable = true)
public Integer getNoCache() {
return this.noCache;
}
public void setNoCache(Integer noCache) {
this.noCache = noCache;
}
@Column(name = "STYLE", unique = false, nullable = true, insertable = true, updatable = true, length = 80)
public String getStyle() {
return this.style;
}
public void setStyle(String style) {
this.style = style;
}
@Column(name = "SDESC_FR", unique = false, nullable = true, insertable = true, updatable = true)
public String getSdescFr() {
return this.sdescFr;
}
public void setSdescFr(String sdescFr) {
this.sdescFr = sdescFr;
}
@Column(name = "SDESC_DE", unique = false, nullable = true, insertable = true, updatable = true)
public String getSdescDe() {
return this.sdescDe;
}
public void setSdescDe(String sdescDe) {
this.sdescDe = sdescDe;
}
@Column(name = "SDESC_UK", unique = false, nullable = true, insertable = true, updatable = true)
public String getSdescEn() {
return this.sdescEn;
}
public void setSdescEn(String sdescEn) {
this.sdescEn = sdescEn;
}
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "banner")
public Set<PortalPageBanner> getPortalPageBanners() {
return this.portalPageBanners;
}
public void setPortalPageBanners(Set<PortalPageBanner> portalPageBanners) {
this.portalPageBanners = portalPageBanners;
}
}
Code between sessionFactory.openSession() and session.close():Code:
Banner banner = new Banner();
banner.setBannerKey("TEST-BANNER");
banner.setStoreId(101);
banner.setDeleted(0);
banner.setDisplayOrder(1);
banner.setEndDate(new Date());
banner.setStartDate(new Date());
banner.setCreationTime(new Date());
banner.setLinkTarget("test/test.jsp");
banner.setLinkType(1);
banner.setStatus(1);
banner.setTextDe("text_de");
banner.setTextFr("text_fr");
banner.setTextEn("text_en");
entityManager.persist(banner);
Full stack trace of any exception that occurs:The column OID in table LS_BANNERS does not allow null values.
Code:
org.springframework.dao.DataIntegrityViolationException: org.hibernate.exception.ConstraintViolationException: could not insert: [com.leshop.glass.portal.bm.Banner]; nested exception is javax.persistence.EntityExistsException: org.hibernate.exception.ConstraintViolationException: could not insert: [com.leshop.glass.portal.bm.Banner]
Caused by: javax.persistence.EntityExistsException: org.hibernate.exception.ConstraintViolationException: could not insert: [com.leshop.glass.portal.bm.Banner]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:555)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:192)
at org.springframework.orm.jpa.JpaTemplate$5.doInJpa(JpaTemplate.java:264)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:192)
at org.springframework.orm.jpa.JpaTemplate.persist(JpaTemplate.java:262)
at com.leshop.glass.common.dao.AbstractDAO.save(AbstractDAO.java:20)
at com.leshop.glass.portal.TestPortalPageDAO.testPageWithBanner(TestPortalPageDAO.java:67)
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 junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.leshop.glass.portal.bm.Banner]
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.java:40)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2044)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2481)
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(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:611)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:603)
at org.hibernate.engine.CascadingAction$8.cascade(CascadingAction.java:202)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:412)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:261)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:611)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:603)
at org.hibernate.engine.CascadingAction$8.cascade(CascadingAction.java:202)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:437)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:326)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:620)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:594)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:598)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:186)
... 18 more
Caused by: com.sybase.jdbc3.jdbc.SybSQLException: The column OID in table LS_BANNERS does not allow null values.
at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.executeLoop(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.execute(Unknown Source)
at com.sybase.jdbc3.jdbc.SybPreparedStatement.execute(Unknown Source)
at org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.java:108)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
... 62 more
Name and version of the database you are using:Sybase 12.5 (using Jconn3 - JDBC3)
The generated SQL (show_sql=true):Code:
insert into LS_BANNERS (TEXT_FR, BANNERS_KEY, START_DATE, END_DATE, IMAGE_DE, IMAGE_FR, IMAGE_UK, LINK_TARGET, STYLE, TARGET_DEPT, TEXT_DE, TEXT_UK, SDESC_DE, SDESC_FR, SDESC_UK, TITLE_DE, TITLE_FR, TITLE_UK, DELETED, DISPLAY_ORDER, LINK_TYPE, NO_CACHE, STATUS, LAST_MOD_TIME, STORE_ID, CREATION_TIME) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
In the generated SQL above, we can se that OID column isn't included.
It seems that the '@Id @GeneratedValue' doesn't automatically generate the next value.
I also tried with '@Id @GeneratedValue (strategy=GenerationType.AUTO)' but it does the same.
Why the OID column not included in the SQL insert statment ?
How can I tell Hibernate that my OID is an autoincremented value ?
Thanks for your help.
Hervé