java - 在 hibernate 中插入多个对象作为实例变量

标签 java oracle hibernate

请帮助我理解为什么多个对象作为实例变量插入不起作用。

教授.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 应命名为Coursedaycourse 应命名为dayCourseevecourse 应命名为 eveningCourse

关于java - 在 hibernate 中插入多个对象作为实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24583766/

相关文章:

sql - Oracle 中 SQL 与存储过程的性能对比

java - 如何更新数据库行

java - 事务需要异常 : no transaction is in progress with Spring Data JPA

java - 如何删除 ArrayList 中的重复条目

java - 了解Kafka流groupBy和window

java - 在随机化的数组中使用数字随机数

java - 处理一个对象的创建,该对象有一个子对象(〜实体的集合可能有 1000000 或更多)

java - useSystemProperties() 不适用于 Apache HttpClientBuilder.create() 版本 4.5.6

sql - 顶尖。在 htp.prn 中调用 proc?

java - Hibernatemock 的文档或教程?