Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-OneToMany单向映射-SQLGrammarException_Java_Sql_Oracle_Hibernate - Fatal编程技术网

Java Hibernate-OneToMany单向映射-SQLGrammarException

Java Hibernate-OneToMany单向映射-SQLGrammarException,java,sql,oracle,hibernate,Java,Sql,Oracle,Hibernate,我对冬眠学习还不熟悉,所以研究冬眠中使用的关系。我所理解的是-对于带有外键的OneToMany单向关系映射,连接列将位于目标实体中(在我的例子中是-Review类)。我不需要让它双向运行 但在实施过程中,我发现了以下错误: Hibernate: insert into course (title, id) values (?, ?) Hibernate: insert into review (comment, id) values (?, ?) 2020-05-07 19:44:24 WARN

我对冬眠学习还不熟悉,所以研究冬眠中使用的关系。我所理解的是-对于带有外键的OneToMany单向关系映射,连接列将位于目标实体中(在我的例子中是-Review类)。我不需要让它双向运行

但在实施过程中,我发现了以下错误:

Hibernate: insert into course (title, id) values (?, ?)
Hibernate: insert into review (comment, id) values (?, ?)
2020-05-07 19:44:24 WARN  SqlExceptionHelper:137 - SQL Error: 928, SQLState: 42000
2020-05-07 19:44:24 ERROR SqlExceptionHelper:142 - ORA-00928: missing SELECT keyword

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1356)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:443)
    at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3202)
    at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2370)
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:447)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
    at com.practice.hibernate008.onetomany.unidirectional.HibernateApp_1_CreateCourseAndReviewsDemo.main(HibernateApp_1_CreateCourseAndReviewsDemo.java:40)
课程实体类: 主要方法: 已创建表的SQL: 参考链接:

示例3:使用外键映射的单向一对多关联
//在客户类别中:
@OneToMany(孤立删除=真)
@JoinColumn(name=“CUST\u ID”)//join列位于订单的表中
公共集合getOrders(){return orders;}
休眠配置:

oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:oracledb
冬眠
冬眠
1.
org.hibernate.dialen.oraclealent
真的
线
尝试了以下选项,但无效:
1。转义字符倒勾(“`”)
2.转义字符(“\”)
3.hibernate属性:true

请为此提供帮助!!!

实际上,您的映射还可以。您应该只为
注释添加注释

@实体
@表(name=“review”)
公开课复习{
@列(名称=“`comment`”)
私有字符串注释;
// ...
}

实际上,您的映射还可以。您应该只为
注释添加

@实体
@表(name=“review”)
公开课复习{
@列(名称=“`comment`”)
私有字符串注释;
// ...
}

最后,我将DB中的列名重命名为
course\u comment

@Column(name="course_comment")
private String courseComment;

最后,我将DB中的列名重命名为
course\u comment

@Column(name="course_comment")
private String courseComment;

我知道双向关系,它对我来说很好。问题是单向映射。更新了问题。如果我已经在使用外键,为什么还要添加链接?您必须更正您的数据库架构,以使用单向@OneToMany。正如我提到的,您需要在两个连接实体之间添加链接表,以便这。你能解释一下-模式中有什么问题吗?对于OneToMany单向映射,外键应该在目标实体中,这在我的情况下是正确的。我已经更正了我的答案。问题的根本原因完全是在另一个地方。;)它没有帮助…它现在给出了这个错误-
,原因是:java.sql.SQLSyntaxErrorExcept离子:ORA-00904:“评论“:无效标识符
:|我知道双向关系,它对我很好。问题是单向映射。更新了问题。如果我已经在使用外键,为什么还要添加链接?您必须更正数据库模式,以使用单向@OneToMany。正如我提到的,在两个连接实体之间需要额外的链接表。您能解释一下模式中的错误吗?对于OneToMany单向映射,外键应该位于目标实体中,这在我的情况下是正确的。我已经更正了我的答案。问题的根本原因完全是在另一个地方这没用。。。它现在给出此错误-
原因:java.sql.SQLSyntaxErrorException:ORA-00904:“comment”:无效标识符
:|
public static void main(String[] args) {

    SessionFactory sessionFactory = new Configuration().configure("hibernate-configuration.xml")
                                                       .addAnnotatedClass(Course.class)
                                                       .addAnnotatedClass(Review.class)
                                                       .buildSessionFactory();

    Session session = sessionFactory.getCurrentSession();

    try{

        Course course = new Course("Hibernate - Beginner Course");
        course.addReview(new Review("Great Course ... loved it."));
        course.addReview(new Review("Cool Course ... well done!!"));
        course.addReview(new Review("Dump Course .. You are an idiot."));

        session.beginTransaction();
        System.out.println("Saving the course :: " + course);
        session.save(course);

        session.getTransaction().commit();
    } finally{
        sessionFactory.close();
    }
}
CREATE TABLE "COURSE" 
(   
    "ID" NUMBER NOT NULL ENABLE, 
    "TITLE" VARCHAR2(50 BYTE) DEFAULT null, 
     PRIMARY KEY ("ID"),
 );

CREATE TABLE "REVIEW" 
(   
    "ID" NUMBER NOT NULL ENABLE, 
    "COMMENT" VARCHAR2(256 BYTE) DEFAULT null, 
    "COURSE_ID" NUMBER  DEFAULT NULL, 
     PRIMARY KEY ("ID"),
     FOREIGN KEY("COURSE_ID") REFERENCES "COURSE"("ID")
);
Example 3: Unidirectional One-to-Many association using a foreign key mapping

    // In Customer class:

    @OneToMany(orphanRemoval=true)
    @JoinColumn(name="CUST_ID") // join column is in table for Order
    public Set<Order> getOrders() {return orders;}
<hibernate-configuration>
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:oracledb</property>
        <property name="connection.username">hibernate</property>
        <property name="connection.password">hibernate</property>

        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">1</property>

        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>

        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Set the current session context -->
        <property name="current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>
 1. escaping character backtick ("`") 
 2. escaping character (""\") 
 3. hibernate property : <property name="hibernate.globally_quoted_identifiers">true</property>
@Column(name="course_comment")
private String courseComment;