Legen Sie mehrere Objekte als Instanz-variable in hibernate
Bitte helfen Sie mir zu verstehen, warum mehrere Objekte als Instanz-variable einfügen ist nicht 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();
Ausgabe :
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)
- Danke für deine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den ORA-01747 Fehler bedeutet, dass Sie versucht haben, verwenden Sie den Namen einer Spalte, die ein reserviertes Schlüsselwort in Oracle. Schauen Sie die Liste von Oracle Reservierte Worte.
Die problematische Spalte name hier wird der
DESC
Spalte. Das ist ein reserviertes Schlüsselwort. Eine einfache Lösung ist auch das überschreiben der Attribute für diedaycourse
Feld:Aber die beste Lösung wird noch sein, um zu vermeiden, reservierte Schlüsselwörter.
Nicht die Namen Ihrer Spalte
desc
. Es ist ein reserviertes SQL-Schlüsselwort (order by name desc
).Name es
description
. Diese verursachen keine SQL-problem, und es willl machen Sie Ihren code und Ihre schema mehr lesbar.Ebenso
Courses
benannt werden solltenCourse
,daycourse
benannt werden solltendayCourse
, undevecourse
benannt werden sollteneveningCourse
.