【问题标题】:One table is not being created by toplinktoplink 没有创建一个表
【发布时间】:2012-06-06 23:50:54
【问题描述】:

我觉得问这个真的很愚蠢。但我一直在查看我的代码 4 小时,但无法弄清楚。我已经多次重建我的数据库,但无法让它工作。 由于某种原因,我的一张表没有被创建。我有 4 个表游戏、开发人员、游戏映像和用户。用户没有被创建,但另一个正在被完美地创建并且正在工作。我确定这是一个愚蠢的错误,但我只是不明白。 如果有人能告诉我为什么会发生这种情况,那就太好了。 我用的是toplink

这是我的代码:

持久化 xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="GameDatabasePU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>domainmodel.Game</class>
<class>domainmodel.GameImage</class>
<class>domainmodel.Developer</class>
<class>domainmodel.User</class>
<properties>
  <property name="toplink.jdbc.user" value="app"/>
  <property name="toplink.jdbc.password" value="app"/>
  <property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/Gamedatabase;create=true"/>
  <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
  <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>

用户:

@Entity
public class User {
    @Id
    private String username;
    private String password;
    private String firstName;
    private String surname;

    public User() {
    }

    public User(String naam, String pas){
        setUsername(naam);
        setPassword(pas);
    }

    public User(String naam, String pas, String firstName, String surname){
        setUsername(naam);
        setPassword(pas);
        setFirstName(firstName);
        setSurname(surname);
    }

    public void setUsername(String naam){
        this.username=naam;
    }
    //methods
}

【问题讨论】:

  • 疯了...我今天已经两次看到这个问题(Hibernate has not created table in Db but showing create statement)...也许原因/解决方案可能是相关的。
  • 我不认为这是同一个问题:/
  • 1)如果您只是添加一个自动生成的 int/long Id - 它会开始工作吗? 2)如果你先手动删除它会创建表吗?
  • 添加自动生成的 id 似乎并没有改变任何东西。我不太明白你说的先丢表是什么意思。如果它不存在,我该如何丢弃它?

标签: java jpa persistence toplink


【解决方案1】:

不是真正的答案,而是更多缩小问题范围的提示。

1) 尝试从您的 persistence.xml 中删除所有其他类(注释掉其他类的注释)

可能问题出在另一个类中,输出具有误导性。

2) 尝试将调试/输出级别设置为另一个级别(DEBUG、FINE、FINEST)并让 JPA 提供程序公开查询。

对于 TopLink,我认为将其添加到您的 presistence 属性部分就可以了:

<property name="toplink.logging.level" value="FINEST" />

3) 您使用的是哪个数据库? MySql、PostgreSQL、HSQL、SQL-server?

某些数据库不(完全)支持某些东西。

4) 没关系,但无论如何;

使用@Table(name = "user") 或@Table(name = "usera") 注释您的用户类,这将确保表名不是问题。

【讨论】:

  • 哇,非常感谢!很棒的提示。显然这是表名。这是我尝试的第一件事。用户不起作用,因为它是一个标识符。我实际上应该知道:/ 添加 @Table(name = "\"user\"") 就可以了。
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2019-06-28
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多