SQLSyntaxErrorException:表/视图不存在

时间:2015-04-02 23:23:13

标签: java java-ee jpa eclipselink derby

我正在获得一个大的堆栈跟踪,其根源是:java.sql.SQLSyntaxErrorException: Table/View 'U' does not exist.后面是需要实体的所有内容的异常:java.sql.SQLTransactionRollbackException: Constraint 'PSSVSERSRDTABASEID' is invalid: referenced table U does not exist.

我看了this question and answer关于类似问题,但它似乎没有解决我的特定问题。原因是当我在Eclipse中打开Database Development模式时,我可以看到每个其他实体都映射到一个表,而不是实体User('U')。

用户实体:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "disc", discriminatorType = DiscriminatorType.STRING)
@Table(name = "U")
@NamedQuery(name = "FIND_WITH_USER_ID", query="SELECT DISTINCT u FROM User u WHERE u.userId = :userId")
public class User implements Serializable{
    private static final long serialVersionUID = 2468889149889625824L;
    @Id @GeneratedValue
    protected long databaseId;

    //getters/setters/etc

}

用户确实有一个子类(显示在表模式中):

@Entity
public class Customer extends User{
    private static final long serialVersionUID = -5239293307816318553L;

    public Customer(){
        super();
    } 

    //getters/setters/etc

}

在我的persistence.xml文件中,我指定要创建的表(如果它们尚不存在):

<properties>
        <property name="javax.persistence.jdbc.driver" value="C:\Program Files\GlassFish\glassfish-4.1\glassfish4\javadb\lib\derby.jar"></property>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/AppDB;create=true"></property>
        <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
</properties>

如上所述,数据库模式中显示了其他表(并且数据库ping成功)。问题似乎围绕用户实体形成。我认为它可能与保留关键字名称冲突有关,所以我改变了表的名称几次(一旦遇到这个异常,Eclipse / Glassfish似乎有问题,即使我做了更改,例如作为名称,并重新启动它不更新的应用程序;超出我认为的问题范围)。

为什么不为实体用户创建表格?我缺少什么?为什么还要创建其他表?

1 个答案:

答案 0 :(得分:0)

问题在于SQL脚本,您传递的是表别名而不是列名。应该是你。

SELECT DISTINCT e.emp_id FROM Emp e