繁体   English   中英

SQLSyntaxErrorException:表/视图不存在

[英]SQLSyntaxErrorException: Table/View does not exist

我得到了一个大的堆栈跟踪,其根本原因是: java.sql.SQLSyntaxErrorException: Table/View 'U' does not exist. 对于要求该实体的所有内容,均引发一个异常: java.sql.SQLTransactionRollbackException: Constraint 'PSSVSERSRDTABASEID' is invalid: referenced table U does not exist.

我看了看这个问题,回答有关类似问题,但它似乎并没有解决我的具体问题。 原因是当我在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似乎也有问题,即使我进行了更改,例如作为名称,并重新启动不会更新的应用;我认为这超出了问题的范围)。

为什么不为实体用户创建表? 我想念什么? 为什么仍然创建其他表?

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

SELECT DISTINCT e.emp_id从Emp e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM