2

Please help me to understand why multiple Objects as instance variable insertion is not woking.

Professor.java

@Entity
public class Professor {
@Id
private long id;
private String name;
@Embedded
private Courses daycourse;
@Embedded
@AttributeOverrides({
        @AttributeOverride(name="code",column=@Column(name="eve_code")),
        @AttributeOverride(name="desc",column=@Column(name="eve_desc"))})
private Courses evecourse;
// gettter and setters
}

Courses.java

@Embeddable
public class Courses {
private String code;
private String desc;
    // gettter and setters
}

Main.java

         Professor prof = new Professor();
         prof.setId(1);
         prof.setName("leo");

         Courses evecourse = new Courses();
         evecourse.setCode("MCA");
         evecourse.setDesc("Desc");

         Courses daycourse = new Courses();
         daycourse.setCode("MSC");
         daycourse.setDesc("Desc");


         prof.setEvecourse(evecourse);
         prof.setDaycourse(daycourse);



         Session session = sessionFactory.openSession();
         session.beginTransaction();
         session.save(prof);            
         session.getTransaction().commit();
         session.close();

Output :

Hibernate: 
    create table Professor (
        id number(19,0) not null,
        code varchar2(255),
        desc varchar2(255),
        eve_code varchar2(255),
        eve_desc varchar2(255),
        name varchar2(255),
        primary key (id)
    )
Hibernate: 
    insert 
    into
        Professor
        (code, desc, eve_code, eve_desc, name, id) 
    values
        (?, ?, ?, ?, ?, ?)
Jul 05, 2014 12:08:51 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1747, SQLState: 42000
Jul 05, 2014 12:08:51 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-01747: invalid user.table.column, table.column, or column specification

Jul 05, 2014 12:08:51 PM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
0

2 Answers 2

5

Don't name your column desc. It's a reserved SQL keyword (order by name desc).

Name it description. This won't cause any SQL problem, and it willl make your code and your schema more readable.

Likewise, Courses should be named Course, daycourse should be named dayCourse, and evecourse should be named eveningCourse.

Sign up to request clarification or add additional context in comments.

Comments

3

The ORA-01747 error means that you tried to use a column name that is a reserved keyword in Oracle. Look at the list of Oracle Reserved Words.

The problematic column name here is the DESC column. That is a reserved keyword. A simple solution is to also override the attributes for the daycourse field:

@Embedded
@AttributeOverrides({
        @AttributeOverride(name="code",column=@Column(name="day_code")),
        @AttributeOverride(name="desc",column=@Column(name="day_desc"))})
private Courses daycourse;

@Embedded
@AttributeOverrides({
        @AttributeOverride(name="code",column=@Column(name="eve_code")),
        @AttributeOverride(name="desc",column=@Column(name="eve_desc"))})
private Courses evecourse;

But the best solution will still be to avoid reserved keywords.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.