【发布时间】:2017-09-02 21:27:45
【问题描述】:
我正在尝试使用 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="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 , 主键 (ID))")
【问题讨论】:
-
在您的
persistence.xml中没有名为"Trainstops"的持久性单元,您正在尝试在此处实例化:Persistence.createEntityManagerFactory("Trainstops")。持久性单元称为SubmissionIds,此PU 映射的实体称为OriginationSubmissions而不是Submissions。您应该检查持久性单元名称和类名称是否正确。 -
“LEVEL”是保留字,不能用作列名。将列注释添加到您的级别属性并在表中将其命名为其他名称以使其正常工作,或者只是为该属性指定一个不同的名称。
-
@dic19 - 将实体名称从 TrainStops 更改为 SubmissionIds。错误仍然存在。
标签: java jpa eclipselink