我正在获得一个大的堆栈跟踪,其根源是: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似乎有问题,即使我做了更改,例如作为名称,并重新启动它不更新的应用程序;超出我认为的问题范围)。
为什么不为实体用户创建表格?我缺少什么?为什么还要创建其他表?
答案 0 :(得分:0)
问题在于SQL脚本,您传递的是表别名而不是列名。应该是你。
SELECT DISTINCT e.emp_id FROM Emp e