Reputation: 1
I'm in the process of creating a CRM for my final training project. I have this error which appears when I run the application and I block completely.
My research says it's related to IDs between parents, children, etc. but I'm lost.
My parent class is "Personn" :
package fr.epsi.poec24.mspr.epsimspr.entities;
import jakarta.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "personnes")
@Inheritance(strategy = InheritanceType.JOINED)
public class Personne implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_personne")
private int id_personne;
@Column(name = "prenom")
private String prenom;
@Column(name = "nom")
private String nom;
@Column(name = "numero_rue")
private String numero_rue;
@Column(name = "ville")
private String ville;
@Column(name = "code_postal")
private int code_postal;
@Column(name = "email")
private String email;
@Column(name = "telephone")
private String telephone;
@Column(name = "type_personne")
private String type_personne; // Ajout du champ pour indiquer le type de personne
@OneToOne(mappedBy = "personne", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Client client;
@OneToOne(mappedBy = "personne", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Employe employe;
// Constructeurs
public Personne() {
}
public Personne(String prenom, String nom) {
this.prenom = prenom;
this.nom = nom;
}
// Getters and setters
public int getId() {
return id_personne;
}
public void setId(int id) {
this.id_personne = id;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getNumero_rue() {
return numero_rue;
}
public void setNumero_rue(String numero_rue) {
this.numero_rue = numero_rue;
}
public String getVille() {
return ville;
}
public void setVille(String ville) {
this.ville = ville;
}
public int getCode_postal() {
return code_postal;
}
public void setCode_postal(int code_postal) {
this.code_postal = code_postal;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getType_personne() {
return type_personne;
}
public void setType_personne(String type_personne) {
this.type_personne = type_personne;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Employe getEmploye() {
return employe;
}
public void setEmploye(Employe employe) {
this.employe = employe;
}
}
I have two child classes :
package fr.epsi.poec24.mspr.epsimspr.entities;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import jakarta.persistence.*;
import java.io.Serializable;
import java.util.List;
@Entity
@Table(name = "clients", schema = "mspr-crm-acme")
public class Client extends Personne implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private int id_client;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id_personne",
referencedColumnName = "id")
private Personne personne;
@Column(name = "type_personne")
private String type_personne;
@OneToMany(mappedBy = "client", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Commande> commandes;
// Constructors
public Client() {
}
public Client(int id, String nom, String prenom) {
super(nom, prenom);
this.id_client = id;
}
// Getters and setters
public int getId() {
return id_client;
}
public void setId(int id) {
this.id_client = id;
}
public String getType_personne() {
return type_personne;
}
public void setType_personne(String type_personne) {
this.type_personne = type_personne;
}
}
package fr.epsi.poec24.mspr.epsimspr.entities;
import jakarta.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "employes")
public class Employe extends Personne implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id_employe;
@Column(name = "type_personne")
private String type_personne;
@OneToOne (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id_personne", referencedColumnName = "id")
private Personne personne;
// Constructors
public Employe() {
}
public Employe(String nom, String prenom) {
super(nom, prenom);
}
// Getters and setters
public int getId() {
return id_employe;
}
public void setId(int id) {
this.id_employe = id;
}
public String getType_personne() {
return type_personne;
}
public void setType_personne(String type_personne) {
this.type_personne = type_personne;
}
}
Here are the extracts from my script, if that's any help:
[...]
CREATE TABLE IF NOT EXISTS personnes (
`id_personne` bigint NOT NULL AUTO_INCREMENT,
`prenom` varchar(50) DEFAULT NULL,
`nom` varchar(50) DEFAULT NULL,
`numero_rue` varchar(10) DEFAULT NULL,
`rue` varchar(255) DEFAULT NULL,
`ville` varchar(255) DEFAULT NULL,
`code_postal` mediumint(10) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`telephone` varchar(20) DEFAULT NULL,
`type_personne` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id_personne`)
);
[...]
CREATE TABLE IF NOT EXISTS clients (
`id_client` bigint NOT NULL AUTO_INCREMENT,
`id_personne` bigint NOT NULL,
`type_personne` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id_client`),
FOREIGN KEY (`id_personne`) REFERENCES personnes(`id_personne`)
);
CREATE TABLE IF NOT EXISTS employes (
`id_employe` bigint NOT NULL AUTO_INCREMENT,
`login` VARCHAR(50) NOT NULL UNIQUE,
`mot_de_passe` VARCHAR(255) NOT NULL,
`id_personne` bigint NOT NULL,
`type_personne` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id_employe`),
FOREIGN KEY (`id_personne`) REFERENCES personnes(`id_personne`)
);
Thanks you so much !
Here's the error message:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: class org.hibernate.mapping.JoinedSubclass cannot be cast to class org.hibernate.mapping.RootClass (org.hibernate.mapping.JoinedSubclass and org.hibernate.mapping.RootClass are in unnamed module of loader 'app')
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1231) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:949) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.2.jar:3.2.2]
at fr.epsi.poec24.mspr.epsimspr.EpsiMsprApplication.main(EpsiMsprApplication.java:26) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.2.jar:3.2.2]
Caused by: java.lang.ClassCastException: class org.hibernate.mapping.JoinedSubclass cannot be cast to class org.hibernate.mapping.RootClass (org.hibernate.mapping.JoinedSubclass and org.hibernate.mapping.RootClass are in unnamed module of loader 'app')
at org.hibernate.boot.model.internal.PropertyBinder.bind(PropertyBinder.java:306) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:297) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.createBasicBinder(PropertyBinder.java:1169) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.bindBasic(PropertyBinder.java:1071) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.bindProperty(PropertyBinder.java:890) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.buildProperty(PropertyBinder.java:788) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.PropertyBinder.processElementAnnotations(PropertyBinder.java:709) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.EntityBinder.processIdPropertiesIfNotAlready(EntityBinder.java:1026) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.EntityBinder.handleIdentifier(EntityBinder.java:354) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.EntityBinder.bindEntityClass(EntityBinder.java:234) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.internal.AnnotationBinder.bindClass(AnnotationBinder.java:423) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:256) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:279) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:322) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.3.jar:6.1.3]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.1.3.jar:6.1.3]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.3.jar:6.1.3]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.3.jar:6.1.3]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1820) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1769) ~[spring-beans-6.1.3.jar:6.1.3]
... 19 common frames omitted
Upvotes: 0
Views: 50