Les balises JAVA EE - id ne sont pas analysées dans orm.XML


Je suis un débutant dans le monde JPA, et j'essaie de ne pas travailler avec les annotations, (juste avec le fichier XML (orm.xml)), donc je suis ce tutoriel de mappage dans JPA , soudainement, spring boot ne peut pas créer un bean avec le nom it entityManagerFactory , car la formation d'entité n'a pas d'identifiant, mais le problème est dans l'orm.fichier xml, je définis l'id de balise avec le même nom de propriété dans la classe de formation, c'est un lien vers le projet , et ce sont les entités du projet :

Etudiant:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Etudiant implements  Serializable {
    private Long id;
    private String nom;
    private String prenom;
    private Formation formation;
}

Formation:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Formation implements  Serializable {
    //@Id @GeneratedValue
    private Long id;
    private String nom;
    private int duree;
    //@OneToMany(mappedBy="formation", fetch=FetchType.EAGER)
    @JsonIgnore
    private Collection<Etudiant> etudiants;
}

Et c'est l'orm.fichier xml :

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings>
    <entity class="org.sid.dao.entity.Formation">
        <table name="formations">
            <attributes>
                <id name="id">
                    <genrated-value strategy="AUTO"></genrated-value>
                </id>
                <basic name="nom"></basic>
                <basic name="duree"></basic>
                <one-to-many mappedby="formation" fetch="lazy">
                    <basic name="etudiants"></basic>
                </one-to-many>
            </attributes>
        </table>
    </entity>
    <entity class="org.sid.dao.entity.Etudiant">
        <table name="etudiants">
            <attributes>
                <id name="id">
                    <genrated-value strategy="AUTO"></genrated-value>
                </id>
                <basic name="nom"></basic>
                <basic name="prenom"></basic>
                <many-to-one>
                    <Join-column name="id_formation">
                        <basic name="formation"></basic>
                    </Join-column>
                </many-to-one>
            </attributes>
        </table>
    </entity>

</entity-mappings>

Et c'est l'exception :

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: org.sid.dao.entity.Formation
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
    at org.sid.ApplicationSyntheseApplication.main(ApplicationSyntheseApplication.java:22) [classes/:na]
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: org.sid.dao.entity.Formation
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:265) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:717) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:360) ~[spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:382) ~[spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:371) ~[spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:336) ~[spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    ... 16 common frames omitted

Le problème est que je suis sûr que l'orm.xml, le fichier a été chargé dans la construction. :

Author: ekka, 2018-01-27

1 answers

  1. On dirait que vous avez une faute de frappe dans votre xml - genrated-value au lieu de generated-value
  2. Pour que spring boot fonctionne avec orm.fichiers xml vous devriez dire EntityManagerFactory pour l'utiliser. c'est-à-dire si votre fournisseur JPA est Hibernate:

    @Configuration
    public class HibernateConfiguration extends HibernateJpaAutoConfiguration {
        @Bean
        @Override
        public LocalContainerEntityManagerFactoryBean entityManagerFactory(
                EntityManagerFactoryBuilder factoryBuilder)
        {
            final LocalContainerEntityManagerFactoryBean ret = super.entityManagerFactory(factoryBuilder);
            ret.setMappingResources("orm.xml");
            return ret;
        }
    

    }

 0
Author: asm0dey, 2018-01-27 07:49:14