2014-02-16 3 views
1

Когда я тестирую свой проект, в базе данных создаются всего 4 таблицы, но не остальные, и я не знаю почему. Создаются таблицы notification, position, dernierePosition и user, но не таблица demande и другие таблицы, которые я не приводил в этом примере. Есть некоторые свойства, которые я забыл? Спасибо за помощь. Вот некоторые файлы:Таблица Hibernate не существует

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory name=""> 
    <!-- Database connection settings, Connect to HSQL, IN Memory --> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/***</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.username">***</property> 
    <property name="hibernate.connection.password"/> 
    <!-- DB schema will be updated if needed --> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    <!-- JDBC connection pool (use the built-in) 
List of XML mapping files --> 
    <mapping class="modele.Demande" resource="Demande.hbm.xml"/> 
    <mapping class="modele.DernierePosition" resource="DernierePosition.hbm.xml"/> 
    <mapping class="modele.Group" resource="Group.hbm.xml"/> 
    <mapping class="modele.Invitation" resource="Invitation.hbm.xml"/> 
    <mapping class="modele.Marqueur" resource="Marqueur.hbm.xml"/> 
    <mapping class="modele.Notification" resource="Notification.hbm.xml"/> 
    <mapping class="modele.NotificationMarqueur" resource="NotificationMarqueur.hbm.xml"/> 
    <mapping class="modele.Position" resource="Position.hbm.xml"/> 
    <mapping class="modele.User" resource="User.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

Position.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 15 févr. 2014 01:46:28 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="modele.Position" table="POSITION"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="native" /> 
     </id> 
     <property name="lattitude" type="double"> 
      <column name="LATTITUDE" /> 
     </property> 
     <property name="longitude" type="double"> 
      <column name="LONGITUDE" /> 
     </property> 
    </class> 
</hibernate-mapping> 

DenierePosition.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 15 févr. 2014 01:46:28 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <joined-subclass name="modele.DernierePosition" extends="modele.Position" table="DERNIEREPOSITION" lazy="false"> 
     <key> 
      <column name="ID" /> 
     </key> 
     <property name="time" type="java.util.Date"> 
      <column name="TIME" /> 
     </property> 
     <one-to-one name="user" class="modele.User"></one-to-one> 
    </joined-subclass> 
</hibernate-mapping> 

Notification.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 15 févr. 2014 01:46:28 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="modele.Notification" table="NOTIFICATION"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="native" /> 
     </id> 
     <many-to-one name="user" class="modele.User" fetch="join"> 
      <column name="USER" /> 
     </many-to-one> 
    </class> 
</hibernate-mapping> 

Demande.java

@XmlRootElement 
public class Demande extends Notification { 

    private Group group; 

    private User demandeur; 

    public Demande(){ 

    } 

    public Demande(Group group, User demandeur) { 
     super(group.getProprietaire()); 
     this.group = group; 
     this.demandeur=demandeur; 
    } 

    // Getters and setters 


} 

Demande.hbm.xml

<?xml version="1.0"?> 
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
    <!-- Generated 15 févr. 2014 01:46:28 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <joined-subclass name="modele.Demande" extends="modele.Notification" table="DEMANDE" lazy="false"> 
     <key> 
      <column name="ID" /> 
     </key> 
     <many-to-one name="group" class="modele.Group" fetch="join"> 
      <column name="GROUP" /> 
     </many-to-one> 
     <many-to-one name="demandeur" class="modele.User" fetch="join"> 
      <column name="DEMANDEUR" /> 
     </many-to-one> 
    </joined-subclass> 
</hibernate-mapping> 

User.java

@XmlRootElement 
public class User { 

    /** Attributs */ 

    private int id; 

    private String pseudo; 

    private String telephone; 

    private String email; 

    @XmlTransient 
    private Set<Demande> demandes; 

    @XmlTransient 
    private Set<Invitation> aInvite; 

    @XmlTransient 
    private Set<Notification> notifications; 

    private DernierePosition dernierePosition; 

    @XmlTransient 
    private Set<Group> groups; 

    @XmlTransient 
    private Set<Group> proprietaire; 

    /** Constructeur */ 
    public User() { 
    } 

    public User(String telephone, String pseudo, String email) { 
     super(); 
     this.pseudo = pseudo; 
     this.telephone = telephone; 
     this.email = email; 
    } 
// Getters and setters 
} 

User.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 15 févr. 2014 01:46:28 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="modele.User" table="USER"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="native" /> 
     </id> 
     <property name="pseudo" type="java.lang.String"> 
      <column name="PSEUDO" /> 
     </property> 
     <property name="telephone" type="java.lang.String" not-null="true" unique="true"> 
      <column name="TELEPHONE" /> 
     </property> 
     <property name="email" type="java.lang.String"> 
      <column name="EMAIL" /> 
     </property> 
     <set name="demandes" table="DEMANDE" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Demande" /> 
     </set> 
     <set name="aInvite" table="INVITATION" inverse="false" lazy="true" access="field"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Invitation" /> 
     </set> 
     <set name="notifications" table="NOTIFICATION" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Notification" /> 
     </set> 
     <one-to-one name="dernierePosition" class="modele.DernierePosition"></one-to-one> 
     <set name="groups" table="GROUP" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Group" /> 
     </set> 
     <set name="proprietaire" table="GROUP" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Group" /> 
     </set> 
    </class> 
</hibernate-mapping> 

Group.java

@XmlRootElement 
public class Group { 

    /** Attributs */ 

    private int id; 

    private String description; 

    private String hashtag; 

    private String password; 

    private Set<Marqueur> marqueurs; 

    @XmlTransient 
    private Set<Invitation> invitations; 

    @XmlTransient 
    private Set<Demande> demandes; 

    private User proprietaire; 

    private Set<User> invites; 

    /** 
    * Constructeur 
    * */ 
    public Group() 
    { 

    } 

    public Group(String description, String hashtag, User proprietaire, String password) { 
     super(); 
     this.description = description; 
     this.hashtag = hashtag; 
     this.proprietaire = proprietaire; 
     this.setPassword(password); 
    } 

Group.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 16 f?vr. 2014 11:30:30 by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="modele.Group" table="GROUP"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="description" type="java.lang.String"> 
      <column name="DESCRIPTION" /> 
     </property> 
     <property name="hashtag" type="java.lang.String"> 
      <column name="HASHTAG" /> 
     </property> 
     <property name="password" type="java.lang.String"> 
      <column name="PASSWORD" /> 
     </property> 
     <set name="marqueurs" table="MARQUEUR" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Marqueur" /> 
     </set> 
     <set name="invitations" table="INVITATION" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.Invitation" /> 
     </set> 
     <many-to-one name="proprietaire" class="modele.User" fetch="join"> 
      <column name="PROPRIETAIRE" /> 
     </many-to-one> 
     <set name="invites" table="USER" inverse="false" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <one-to-many class="modele.User" /> 
     </set> 
    </class> 
</hibernate-mapping> 

Test User

package dao; 

import java.util.List; 

import junit.framework.Assert; 
import modele.User; 

import org.junit.Test; 


public class UserDaoTest { 

    private final String tel = "0601020304"; 
    private final String pseudo = "pseudo"; 
    private final String pseudoModified = "pseudo2"; 
    private final String email = "[email protected]"; 

    @Test 
    public void addUserTest(){ 

     User initialUser = new User(tel, pseudo, email); 

     UserDao.addUser(initialUser); 

     User addedUser = UserDao.getUser(tel); 

     Assert.assertEquals(addedUser.getTelephone(), initialUser.getTelephone()); 
     Assert.assertEquals(addedUser.getPseudo(), initialUser.getPseudo()); 
     Assert.assertEquals(addedUser.getEmail(), initialUser.getEmail()); 
    } 

    @Test 
    public void modifyUserTest(){ 
     UserDao.modifyUser(tel, pseudoModified, email); 

     User modifiedUser = UserDao.getUser(tel); 

     Assert.assertEquals(modifiedUser.getTelephone(), tel); 
     Assert.assertEquals(modifiedUser.getPseudo(), pseudoModified); 
     Assert.assertEquals(modifiedUser.getEmail(), email); 

    } 

    @Test 
    public void listUserTest(){ 
     User modifiedUser = UserDao.getUser(tel); 

     List<User> listUsers = UserDao.listUser(); 

     User listedUser = listUsers.get(listUsers.indexOf(modifiedUser)); 

     Assert.assertEquals(listedUser.getTelephone(), modifiedUser.getTelephone()); 
     Assert.assertEquals(listedUser.getPseudo(), modifiedUser.getPseudo()); 
     Assert.assertEquals(listedUser.getEmail(), modifiedUser.getEmail()); 
    } 

    @Test 
    public void deleteUserTest(){ 
     User user = UserDao.getUser(tel); 

     UserDao.deleteUser(user.getTelephone()); 

     List<User> listUsers = UserDao.listUser(); 

     Assert.assertEquals(listUsers.indexOf(user), -1); 
    } 
} 

ответ

2

Кажется, что есть проблема со многими к одному и присоединился к подклассу. Это подробно объясняется на the hibernate forums; Я не совсем понимаю, почему это так, но объяснение от sdknott (на этом сайте):

Проблема у вас есть с вашим картографированием. Заявив, что ваш ограничивающий столбец «много-к-одному» на самом деле является вашим основным ключевым столбцом таблицы A, Hibernate всегда будет пытаться и разрешить сущность B, поскольку столбец «один-к-одному» никогда не будет пустым.

Я использовал свой источник и изменил различные many-to-one отображения в состыкованных подклассов one-to-one отображений, и все это работает для меня сейчас.Надеюсь, это позволит вам правильно выразить вашу схему.


(в сторону) Оригинальный ответ, который не решает проблему

Я вижу, что у вас есть два члена под названием «пользователь» в Demande классе; помните, что Demande является подклассом Notification и получает его членов. Я никогда не пробовал, и это выглядит странно, и это определенно будет путать. Это может быть причиной вашей проблемы.

Если вам действительно нужны два члена «пользователя», дайте им более подходящие имена (может быть, «реквестер» и «ответчик»? Просто угадывание из контекста). Если вам нужен только один «пользователь», то вам не нужно класть его в Demande, он уже находится в Notification.

+0

Спасибо. Я удалил пользователя в Demande, но ничего не изменилось. Group.xml также не создает таблицу в базе данных –

+0

Я поместил свой проект в UTF-8. Это нормально для комментариев. Févr –

+0

Спасибо, что помогли. Проблема в том, что в моей модели все изменится, если я повседневу один на один. В моей программе у пользователя может быть несколько требований, которые больше не будут иметь отношения друг к другу? Так же как пользователь может принадлежать нескольким группам, и группа может содержать несколько пользователей. Я добавил класс пользователя, спрос и группу в свой код. –

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