创建表时出现JPA / EclipseLink错误

时间:2017-04-07 13:11:26

标签: java jpa eclipselink

我正在尝试使用EclipseLink创建一个表。正在使用的java类是: -

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Id;

@Entity
public class Submissions {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long Id;
 private String XID;
 private String Y;
 @Temporal(TemporalType.DATE)
 private Date uDate;
 private String level;
 private String state;

 public Submissions() {
 }

 //All Relevant getter and setter functions
}

相关的持久性xml如下: -

<persistence-unit name="SubmissionIds">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.obp.selenium.DataObjects.OriginationSubmissions</class>
    <properties>

        <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
        <property name="javax.persistence.jdbc.url"
            value="jdbc:oracle:thin:@localhost:1521:orcl" />
        <property name="javax.persistence.jdbc.user" value="------" />
        <property name="javax.persistence.jdbc.password" value="------" />

        <!-- EclipseLink should create the database schema automatically -->
        <property name="eclipselink.ddl-generation" value="create-tables" />
        <property name="eclipselink.ddl-generation.output-mode"
            value="database" />
        <!-- <property name="eclipselink.canonicalmodel.subpackage"
            value="originationSubmissions" /> -->
    </properties>
</persistence-unit>

我们使用标准方法是将EntityManagerFactory实现为: -

EntityManagerFactory factory = Persistence.createEntityManagerFactory("SubmissionIds");
    EntityManager em = factory.createEntityManager();
    em.getTransaction().begin();
    em.getTransaction().commit();
    em.close();

但是我一直收到以下错误: -

  

EL警告]:2017-04-07 14:04:53.768 - ServerSession(1650327539) - 例外[EclipseLink-4002](Eclipse Persistence Services - 2.6.3.v20160428-59c81c5):org.eclipse.persistence .exceptions.DatabaseException   内部异常:java.sql.SQLSyntaxErrorException:ORA-00904 ::无效标识符

     

错误代码:904   调用:CREATE TABLE SUBMISSIONS(ID NUMBER(19)NOT NULL,XID VARCHAR2(255)NULL,Y VARCHAR2(255)NULL,LEVEL VARCHAR2(255)NULL,STATE VARCHAR2(255)NULL,UDATE DATE NULL,PRIMARY KEY(ID ))   查询:DataModifyQuery(sql =&#34; CREATE TABLE SUBMISSIONS(ID NUMBER(19)NOT NULL,XID VARCHAR2(255)NULL,Y VARCHAR2(255)NULL,LEVEL VARCHAR2(255)NULL,STATE VARCHAR2(255)NULL, UDATE DATE NULL,PRIMARY KEY(ID))&#34;)

2 个答案:

答案 0 :(得分:1)

当有一个保留字使用时,Eclipse会报告一个上升的错误,你可以在这里使用:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=260637

问题来自使用保留字我实际上并不知道你的DBMS,如果它是你的attributs的Mysql XID LEVEL  是一个保留字。你可以在这里找到mysql保留字:  https://dev.mysql.com/doc/refman/5.7/en/keywords.html

您还可以从用于构建表的sql代码中获取类型为DATE的列名更新

  

UDATE DATE NULL

所以在我看来,你还需要在uDate上看你的attribut名字

答案 1 :(得分:0)

问题在于名为Field的LEVEL。 @Chris在评论中提出了正确答案。的&#34; LEVEL&#34;是保留字,不能用作列名。将列注释添加到您的关卡属性中,并在表格中将其命名为其他内容,以使其正常工作,或者只是为该属性指定一个不同的名称。

更改字段名称很容易。