【发布时间】:2012-07-02 05:32:22
【问题描述】:
我开发了一些单元测试,但所有 SQL 语句都失败了,你能看看这个日志和配置吗?
2012 年 7 月 1 日下午 4:33:05 org.glassfish.persistence.common.Java2DBProcessorHelper 执行 DDL 警告:PER01000:得到 SQLException 执行语句“CREATE TABLE CAR(ID BIGINT NOT NULL,BRAND VARCHAR(255) NOT NULL,说明 VARCHAR(255)、FUEL VARCHAR(255) NOT NU\ LL、齿轮箱 VARCHAR(255) NOT NULL, KILOMETERS INTEGER NOT NULL, MODEL VARCHAR(255) NOT NULL, PRICE 整数非空,类型 VARCHAR(255) 非空,年整数非空, EQUIPM\ ENT_ID BIGINT、SECURITY_ID BIGINT、主密钥 (ID))": java.sql.SQLSyntaxErrorException:语法错误:遇到“YEAR” 第 1 行,第 263 列。2012 年 7 月 1 日下午 4:33:05 org.glassfish.persistence.common.Java2DBProcessorHelper 执行 DDL 警告:PER01000:得到 SQLException 执行语句“CREATE TABLE 车辆(ID BIGINT NOT NULL,MAKE VARCHAR(255) NOT NULL,型号 VARCHAR(255) NOT NULL,TRIM VARCHAR(255) \ NOT NULL,YEAR INTEGER NOT NULL,主键(ID))“:java.sql.SQLSyntaxErrorException:语法 错误:在第 1 行第 100 列遇到“TRIM”。2012 年 7 月 1 日 4:33:06 PM org.glassfish.persistence.common.Java2DBProcessorHelper executeDDLs 警告:PER01000:得到 SQLException 执行语句“ALTER TABLE CAR ADD CONSTRAINT FK_CAR_SECURITY_ID FOREIGN KEY (SECURITY_ID) 参考安全(ID)“:java.sql.SQLSy\ ntaxErrorException:'ALTER TABLE' 不能在 'CAR' 上执行,因为它不存在。 7月1日, 2012 下午 4:33:06 org.glassfish.persistence.common.Java2DBProcessorHelper 执行 DDL 警告:PER01000:得到 SQLException 执行语句“ALTER TABLE CAR ADD CONSTRAINT CAR_EQUIPMENT_ID FOREIGN KEY (EQUIPMENT_ID) 参考设备 (ID)": java.sql.SQLSy\ ntaxErrorException: 'ALTER TABLE' 不能在 'CAR' 上执行,因为它不存在。 7月1日, 2012 下午 4:33:06 com.sun.ejb.containers.BaseContainer initializeHome 信息:EJB5181:EJB VehicleEJB 的可移植 JNDI 名称: [java:global/classes/VehicleEJB!com.thevehiclelist.VehicleEJB, java:global/classes/VehicleEJB] 2012 年 7 月 1 日下午 4:33:06 com.sun.ejb.containers.BaseContainer initializeHome 信息: EJB5181:EJB BookEJB 的可移植 JNDI 名称: [java:global/classes/BookEJB!se.while_se.BookEJB, java:global/classes/BookEJB] 2012 年 7 月 1 日下午 4:33:06 com.sun.ejb.containers.BaseContainer initializeHome 信息: EJB5181:EJB CarEJB 的可移植 JNDI 名称: [java:global/classes/CarEJB, java:global/classes/CarEJB!se.while_se.CarEJB] 2012 年 7 月 1 日下午 4:33:07 org.eclipse.persistence.session.file:/tmp/gfembed468260415984552053tmp/applications/classes/_carcmsPU 警告:本地异常堆栈:异常 [EclipseLink-4002] (Eclipse 持久性服务 - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException 内部 异常:java.sql.SQLSyntaxErrorException:语法错误:遇到 “TRIM”在第 1 行第 39 列。错误代码:20000 调用:INSERT INTO 车辆(ID、品牌、型号、装饰、年份)值(?、?、?、?、?) bind => [5 个参数绑定] 查询:InsertObjectQuery(Vehicle [id=1, year=2007, make=Volvo, model=V70, trim=2.4D]) 在 org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535) 在 org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717) 在 org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:342) 在 org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:162) 在 org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:177) 在 org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:472) 在 org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80) 在 org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90) 在 org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287) 在 org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) 在 org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844) 在 org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:743) 在 org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) 在 org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) 在 org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="carcmsPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/__default</jta-data-source>
<class>se.while_se.Book</class>
<class>se.while_se.Car</class>
<class>com.thevehiclelist.Vehicle</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:MyTestDb;create=true" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
</properties>
</persistence-unit>
</persistence>
还有我的 pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.8.2.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
我不知道它可能是什么,尝试了很多次谷歌搜索,但没有找到任何参考代码。请您看看我的配置有什么问题或建议我获取一些文档吗?
最好的问候
【问题讨论】:
-
年份看起来像 Oscar 一个保留字。在您的 create table 语句中,尝试将 year 更改为 caryear 甚至是 years,然后再试一次。