2012-06-06 3 views
0

Я чувствую себя действительно глупым, чтобы спросить об этом. Но я смотрел на свой код в течение 4 часов и не могу понять это. Я несколько раз перестраиваю свою базу данных и не могу заставить ее работать. Одна из моих таблиц по какой-то причине не создается. У меня есть 4 стола игры, разработчик, gameimage и пользователь. Пользователь не создается, а другой создается отлично и работает. Я уверен, что это глупая ошибка, но я просто этого не вижу. Если бы кто-нибудь мог просто сказать мне, почему это может произойти, это было бы здорово. Я использую TopLinkОдин стол не создается 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 
} 
+0

Сумасшедший ... Я видел эту проблему дважды сегодня ([Hibernate не создал таблицу в Db, но показывал оператор создания] (http://stackoverflow.com/questions/10919844/hibernate-has-not-created- table-in-db-but-show-create-statement)) ... возможно, причина/решение могут быть связаны. –

+0

Я не думаю, что это та же проблема:/ –

+0

1) Если вы просто добавите autogenereated int/long Id - она ​​начнет работать? 2) будет ли он создавать таблицу, если вы вручную сбросите ее первым? – esej

ответ

2

Не НАСТОЯЩИЙ ответ, но еще несколько советов, чтобы локализовать проблему вниз.

1) Попробуйте удалить все другие классы от вашего persistence.xml (закомментировать аннотации к другим классам)

Может быть, проблема в другом классе и выход в заблуждении.

2) Попробуйте установить уровень отладки/вывода на другой уровень (DEBUG, FINE, FINEST) и попросите поставщика JPA разоблачить запросы.

Для TopLink Я думаю Добавляя это в свойствах prersistence разделе будет делать трюк:

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

3) Какие базы данных вы используете? MySql, PostgreSQL, HSQL, SQL-сервер?

Некоторые базы данных не поддерживают (полностью) некоторые вещи.

4) Не имеет значения, но в любом случае;

Аннотировать свой класс пользователя с помощью @Table(name = "user") или @Table(name = "usera"), это определит, что имя таблицы не является проблемой.

+0

Ничего себе, спасибо! Отличные советы. По-видимому, это было имя таблицы. Это было первое, что я пробовал. Пользователь не работает, потому что он является идентификатором. Я действительно должен был знать, что:/Adding @Table (name = "\" user \ "") сделал трюк. –

Смежные вопросы