DAns le main, ajoutez
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
<class>com.example.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/mydb" />
<property name="javax.persistence.jdbc.user" value="myuser" />
<property name="javax.persistence.jdbc.password" value="mypassword" />
</properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</persistence-unit>
</persistence>
Map<String, String> properties = new HashMap<>();
properties.put("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/mydb");
properties.put("javax.persistence.jdbc.user", "root");
properties.put("javax.persistence.jdbc.password", "password");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
properties.put("hibernate.hbm2ddl.auto", "update");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPU", properties);
EntityManager em = emf.createEntityManager();
EntityManager em = emf.createEntityManager();
// CRUD: create , read , delalte update , en utilisant le jpa
em.close();
emf.close();
https://drive.google.com/drive/folders/1XBu1gkjeLQi7v03oDmZzhGzo4gK2pahw?usp=sharing
Ajoutez cette ligne dans votre fichier conf de hibernate , pour générer la base de donnée à partir des fichiers xml
<property name="hibernate.hbm2ddl.auto">update</property>
Aide projet hibernate :
http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/
https://docs.jboss.org/hibernate/orm/3.6/reference/fr-FR/html/queryhql.html
Il n’existe pas dans le modèle relationnel de notion d’héritage (d’ailleurs la notion d’objet en général est inconnue). Il faut donc trouver un contournement. Voici les trois solutions possibles :
Une table pour chaque classe. C’est la solution la plus directe, menant pour notre exemple à créer des tables Personne, Etudiant et Salarie. Remarque très importante: on doit dupliquer dans la table d’une sous-classe les attributs persistants de la super-classe. Le nom et prenom doivent donc être dupliqués dans, respectivement, Etudiant et Salarie. Cela donne des tables indépendantes, chaque objet étant complètement représenté par une seule ligne.
Remarque annexe: si on considère que Personne est une classe abstraite qui ne peut être instanciée directement, on ne crée pas de table Personne.
Une seule table pour toute la hiérarchie d’héritage. On créerait donc une table Personne, et on y placerait tous les attributs persistants de toutes les sous-classes. La table Personne aurait donc un attribut id_etudiant (venant de Etudiant), et un attribut salaire (venant de Salarie).
Les instances de Personne, Etudiant et Salarie sont dans ce cas toutes stockées dans la même table Personne, ce qui nécessite l’ajout d’un attribut, dit discriminateur, pour savoir à quelle classe précise correspondent les données stockées dans une ligne de la table. L’inconvénient évident, surtout en cas de hiérarchie complexe, est d’obtenir une table fourre-tout contenant des données difficilement compréhensibles.
Enfin, la troisième solution est un mixte des deux précédentes, consistant à créer une table par classe (donc, trois tables pour notre exemple), tout en gardant la spécialisation propre au modèle d’héritage: chaque table ne contient que les attributs venant de la classe à laquelle elle correspond, et une jointure permet de reconstituer l’information complète.
Par exemple: un Etudiant serait représenté partiellement (pour le nom et prenom) dans la table personne, et partiellement (pour les données qui lui sont spécifiques, comme id_numero) dans la table Etudiant.