我得到它從根本上是造成了大量的堆棧跟蹤:需要實體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