请帮助我理解为什么多个对象作为实例变量插入不起作用。
教授.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
}
主.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();
输出:
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)
最佳答案
不要将您的列命名为 desc
。这是一个保留的 SQL 关键字(order by name desc
)。
将其命名为description
。这不会导致任何 SQL 问题,而且会使您的代码和模式更具可读性。
同样,Courses
应命名为Course
,daycourse
应命名为dayCourse
,evecourse
应命名为 eveningCourse
。
关于java - 在 hibernate 中插入多个对象作为实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24583766/