IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

J'ai créé une config Hibernate mais les entity ne sont pas reconnus


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 21
    Par défaut J'ai créé une config Hibernate mais les entity ne sont pas reconnus
    J'ai cette structure :

    /

    └── src

    ├── main

    │ └── java

    │ ├── dao

    │ │ └── RealmDao.java

    │ ├── entity

    │ │ └── Realm.java

    │ ├── util

    │ │ └── HibernateUtil.java

    │ └── main.java

    └── resources

    └── hibernate.cfg.xml

    Voici le code des classes :

    package dao;


    import entity.Realm;
    import jakarta.persistence.criteria.CriteriaBuilder;
    import jakarta.persistence.criteria.CriteriaQuery;
    import jakarta.persistence.criteria.Root;
    import org.hibernate.*;
    import util.HibernateUtil;

    import java.util.List;
    public class RealmDAO {

    public void save(entity.Realm realm) {
    Transaction tx = null;
    try (Session session = HibernateUtil.getSessionFactory().openSession()) {
    tx = session.beginTransaction();
    session.persist(realm);
    tx.commit();
    } catch (Exception e) {
    if (tx != null && tx.isActive()) {
    try {
    tx.rollback();
    } catch (Exception rollbackEx) {
    System.err.println("Rollback failed: " + rollbackEx.getMessage());
    }
    }
    throw e;
    }
    }
    }

    package entity;

    import javax.persistence.*;
    import java.util.Set;

    @Entity
    @Table(name = "realm")
    public class Realm {

    @Id
    private int id;

    private String name;

    @OneToMany(mappedBy = "realm", cascade = CascadeType.
    ALL
    , orphanRemoval = true)
    private Set<Currency> currencies;

    // Getters and setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public Set<Currency> getCurrencies() { return currencies; }
    public void setCurrencies(Set<Currency> currencies) { this.currencies = currencies; }
    }

    package util;


    import entity.Currency;
    import entity.Item;
    import entity.Realm;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public class HibernateUtil {

    private static final SessionFactory
    sessionFactory
    =
    buildSessionFactory
    ();

    private static SessionFactory buildSessionFactory() {
    try {
    return new Configuration()
    .configure("hibernate.cfg.xml")
    .addAnnotatedClass(Realm.class)
    .buildSessionFactory();
    } catch (Throwable ex) {
    System.
    err
    .println("Initial SessionFactory creation failed: " + ex);
    throw new ExceptionInInitializerError(ex);
    }
    }

    public static SessionFactory getSessionFactory() {
    return
    sessionFactory
    ;
    }

    public static void shutdown() {

    getSessionFactory
    ().close();
    }
    }




    public Class Main {
    public static void main(String[] args) {
    System.
    out
    .println("Realm.class is entity? " + HibernateUtil.
    getSessionFactory
    ().getMetamodel().entity(Realm.class));
    }
    }



    hibernate.cfg.xml
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/database</property>
    <property name="hibernate.connection.username">user</property>
    <property name="hibernate.connection.password">password</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <mapping class="entity.Realm"/>
    </session-factory>
    </hibernate-configuration>

    Il n'y a pas d'erreur dans le projet.
    Quand je lance la class main j'ai cette erreur

    Exception in thread "main" java.lang.IllegalArgumentException: Not an entity: entity.Realm

    at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.entity(JpaMetamodelImpl.java:204)

    at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.entity(MappingMetamodelImpl.java:463)

    at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.entity(MappingMetamodelImpl.java:98)

    Je ne sais pas quoi faire.

    Quelqu'un peut m'aider ?

    Merci.

  2. #2
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 485
    Billets dans le blog
    5
    Par défaut
    Je le fais par Spring, donc je ne suis pas forcement compétent pour répondre.

    Mais je pense que tu as oublié de définir le package où il faut scanner pour trouver l'ensemble des classes entités.

    Dans mon projet, par exemple:
    https://bitbucket.org/philippegibaul...urationH2.java

    Ou plus exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           @Bean(name = "localContainerEntityManagerFactoryBean")
    	public LocalContainerEntityManagerFactoryBean getLocalContainerEntityManagerFactoryBean() {
    		LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
    		bean.setDataSource(getDataSource());
    		bean.setPackagesToScan("com.calculateur.warhammer.entity.entity");
    		bean.setJpaVendorAdapter(getJpaVendorAdapter());
    		return bean;
    	}
    Et plus exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bean.setPackagesToScan("com.calculateur.warhammer.entity.entity");
    On doit pouvoir faire la même chose avec du XML...

  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 485
    Billets dans le blog
    5

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/08/2023, 09h20
  2. Réponses: 2
    Dernier message: 10/10/2012, 12h02
  3. Réponses: 6
    Dernier message: 06/02/2008, 17h16
  4. Réponses: 1
    Dernier message: 16/05/2007, 15h52
  5. Réponses: 1
    Dernier message: 04/12/2005, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo