These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Missing auto generate primary key and foreign key for insert
PostPosted: Wed Oct 03, 2007 9:22 pm 
Newbie

Joined: Wed Oct 03, 2007 9:10 pm
Posts: 1
Hi

Hibernate newbie here. I am using Hibernate + Spring + MySQL.

I have an entity (ScheduleData) that has a list of entities (JobParameter class). When Hibernate inserts the JobParameter data into the database, it does not generate a value for the primary key (The primary key has @Id and @GeneratedValue) and does not set a value for the foreign key.

This mapping annotation retrieves the data from the database without any problems.

It encounters the following exception:

Code:
xception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert: [com.yahoo.sm.qatools.ax247.scheduler.JobParameter]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [com.yahoo.sm.qatools.ax247.scheduler.JobParameter]
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [com.yahoo.sm.qatools.ax247.scheduler.JobParameter]
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
   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:2158)
   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
   at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
   at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
   at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:218)
   at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
   at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
   at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
   at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
   at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
   at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
   at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
   at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
   at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:635)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
   at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
   at com.yahoo.sm.qatools.ax247.scheduler.ScheduleDataDAOImpl.addToSchedule(ScheduleDataDAOImpl.java:35)
   at com.yahoo.sm.qatools.ax247.scheduler.ScheduleDataDAOImpl.main(ScheduleDataDAOImpl.java:23)
Caused by: java.sql.SQLException: No value specified for parameter 4
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
   at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1674)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1512)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1455)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1440)
   at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
   at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
   at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
   ... 39 more



There is my code:

Code:
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"spring.xml"});
       
        CronSchedule cronSchedule = new CronSchedule("10", "20", "5", "15", "7", "5", "2007");
        List<JobParameter> jobParameters = new Vector<JobParameter>();
        jobParameters.add(new JobParameter("job2-1", "job2-value1"));
        jobParameters.add(new JobParameter("job2-2", "job2-value2"));
       
        Job job = new Job(27);
       
        ScheduleData scheduleData = new ScheduleData(true, job, cronSchedule, jobParameters);
       
        ScheduleDataDAOImpl dao = (ScheduleDataDAOImpl) appContext.getBean("scheduleDAO");

       getHibernateTemplate().save(scheduleData);


Code:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name="scheduler")
public class ScheduleData implements Serializable {
   @Id
   private long id;
   
   @Column(name="scm_checkout")
   private boolean checkoutFromSourceControl;
   
   @ManyToOne(cascade={CascadeType.REFRESH})
   @JoinColumn(name="job_id")
   private Job job;
   
   @Embedded
   private CronSchedule cronSchedule;
   
   @OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
   @JoinColumn(name="scheduler_id", referencedColumnName="id")
   private List<JobParameter> jobParameters;

        // removed getter & setters
}


Code:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name="scheduler_job_parameters")
public class JobParameter implements Serializable {
    @Id
    @GeneratedValue
    private long id;
   
    @Column(name="scheduler_id", nullable=false)
    private int schedulerId;
   
    @Column
    private String name;
   
    @Column
    private String value;
   
    public JobParameter() { }

    public JobParameter(String name, String value) {
        this.name = name;
        this.value = value;
    }
    // removed getters & setters
}


Code:
CREATE TABLE scheduler (
   id                   INT UNSIGNED NOT NULL AUTO_INCREMENT,
   job_id               INT UNSIGNED NOT NULL,
   scm_checkout         ENUM('True', 'False'),
   seconds              VARCHAR(30),
   minutes              VARCHAR(30),
   hours                VARCHAR(30),
   day_of_month         VARCHAR(30),
   month                VARCHAR(30),
   day_of_week          VARCHAR(30),
   year                 VARCHAR(30),

   PRIMARY KEY (id),
   FOREIGN KEY (job_id) REFERENCES job(id) ON DELETE CASCADE
) TYPE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE scheduler_job_parameters (
   id                   INT UNSIGNED NOT NULL AUTO_INCREMENT,
   scheduler_id         INT UNSIGNED NOT NULL,
   name                 VARCHAR(100) NOT NULL,
   value                text,

   PRIMARY KEY (id),
   FOREIGN KEY (scheduler_id) REFERENCES scheduler(id) ON DELETE CASCADE
) TYPE=INNODB DEFAULT CHARSET=utf8;



Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.