我得到它从根本上是造成了大量的堆栈跟踪:需要实体java.sql.SQLSyntaxErrorException: Table/View 'U' does not exist.
其次是一切例外:java.sql.SQLTransactionRollbackException: Constraint 'PSSVSERSRDTABASEID' is invalid: referenced table U does not exist.
SQLSyntaxErrorException:表/视图不存在
我看着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>
如前所述,其他表格显示在数据库模式ma(并且ping到数据库成功)。问题似乎围绕用户实体形成。我认为它可能与保留的关键字名称冲突有关,所以我更改了表名的几次(在我遇到此异常后,似乎遇到了Eclipse/Glassfish的问题,即使我进行了更改,例如作为名称,并重新启动它不更新的应用程序;超出了我相信的问题范围)。
为什么不为实体用户创建表?我错过了什么?为什么其他表格仍然被创建?
单词“用户”是ANSI标准SQL保留字,所以用德比来使用它,你必须把它们放在双引号(又名分隔标识符)。也许你的对象/关系工具在向Derby发出SQL时没有完全引用User这个词。你可以使用不同于“用户”的名字吗? – 2015-04-03 00:49:02
@Tiny很明显,表格不存在!我的问题是:**为什么不为实体用户?**创建表。实体名称是User,对应的表名为U.我已经将它配置为在启动时创建表(persistence.xml文件)。除用户(表名'U')外,其他所有表格均创建(有问题)。 – chRyNaN 2015-04-03 04:11:25
@BryanPendleton是的我知道单词“用户”是一个保留字,因此'@table(name =“U”)注释'。这会更改表名,以便持久性提供程序将实体映射到表U.因为我指定了'table'注释,所以类名称User应与映射无关。我相信我的错误在于持久性提供者。我只是不确定在哪里。 – chRyNaN 2015-04-03 04:22:09