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

JPA Java Discussion :

Problème migration d'EclipseLink à Hibernate


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut Problème migration d'EclipseLink à Hibernate
    Bonjour,

    Je suis actuellement en train de changer d'implementation de JPA 2.1 en passant de EclipseLink 2.5.1 à Hibernate 4.3.5
    Et là, surprise , Exception ...

    Je précise que c'est un projet Spring MVC, et la principal raison de ma migration et les problèmes rencontrer avec le static weaving, qui par exemple m'oblige à garder un fichier persistence.xml, et qui aussi augmente pas mal les temps de builds... enfin bref

    Voici l'erreur que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class com.demkocompany.config.AppConfig: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Collection element (many-to-many) table alias cannot be empty
     
    Caused by: java.lang.IllegalStateException: Collection element (many-to-many) table alias cannot be empty
    J'ai fait un test en passant mes relation @ManyToMany à @Transient pour voir si ça venait de là mais toujours pareil ...

    ma config spring pour tester ceci est tirer de çe lien : http://www.baeldung.com/2011/12/13/t...g-3-1-and-jpa/

    Est ce que quelqu'un à une idée ?

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    avec un bout de code, on t´aiderait mieux,
    Sinon l´erreur est explicite.

    Eric

  3. #3
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Bonjour,

    Alors apparemment c'est un problème lié au LazyLoading. c'est probablement lié à la Map que j'utilise dans ma relation.

    Donc j'utilise une Map comme ceci pour gérer l’internationalisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    @Entity
    @Table(name = "category")
    public class Category implements Serializable {
     
     // ....................
     
    @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
    			CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "category", orphanRemoval = true)
    	@MapKey(name = "language")
    	private Map<Language, CategoryLang> categoryLang;
     
    //................
    }
     
    @Entity
    @Table(name = "category_lang")
    public class CategoryLang implements Serializable {
     
    	private static final long serialVersionUID = 6765645529442124861L;
     
    	@EmbeddedId
    	private CategoryLangPK categoryLangPK;
     
    	@MapsId("categoryId")
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "category_id", nullable = false)
    	private Category category;
     
    	@MapsId("languageId")
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "lang_id", nullable = false)
    	private Language language;
     
    	@Column(name = "name")
    	private String name = new String("");
     
    	@Column(name = "description")
    	private String description = new String("");
     
    	@Column(name = "link_rewrite", nullable = false, length = 128)
    	private String linkRewrite = new String("");
     
    	@Column(name = "meta_title", length = 128)
    	private String metaTitle = new String("");
     
    	@Column(name = "meta_keywords", length = 255)
    	private String metaKeywords = new String("");
     
    	@Column(name = "meta_description", length = 255)
    	private String metaDescription = new String("");
     
    	//..................................
     
    }
     
    @Embeddable
    public class CategoryLangPK implements Serializable {
     
    	private static final long serialVersionUID = 4178426371238055474L;
     
    	Integer categoryId;
    	Integer languageId;
     
    	@Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime * result
    				+ ((languageId == null) ? 0 : languageId.hashCode());
    		result = prime * result
    				+ ((categoryId == null) ? 0 : categoryId.hashCode());
     
    		return result;
    	}
     
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		CategoryLangPK other = (CategoryLangPK) obj;
    		if (languageId == null) {
    			if (other.languageId != null)
    				return false;
    		} else if (!languageId.equals(other.languageId))
    			return false;
    		if (categoryId == null) {
    			if (other.categoryId != null)
    				return false;
    		} else if (!categoryId.equals(other.categoryId))
    			return false;
     
    		return true;
    	}
     
    }
    Je précise que d'avoir passer ma relation à Lazy résous la précédente exception mais crée un autre problème.

    Mais le nouveau problème est que lorsque j'accède à getCategoryLang() dans mon contrôleur par exemple j'ai une NullPointerException !

    J'ai essayer une petite boucle au niveau du service pour forcer le loading et là surprise ça affiche bien mes propriété dans les logs mais au niveau du service seulement !
    dans le contrôleur j'ai toujours une NullPointerException !

    Je précise que c'est un projet Spring MVC 4 avec Hibernate 4.3.5 comme implémentation JPA et j'utilise bien le filter : OpenEntityManagerInViewFilter

    Donc là je sèche complètement !!

    Si quelqu'un à une idée ?

    Merci d'avance

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    Salut,
    Faudra initialiser la map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Map<Language, CategoryLang> categoryLang =new HashMap<  Language, CategoryLang>();
    Eric

  5. #5
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    J'ai essayé sans grand espoir car j'avais déjà essayé et ça ne fonctionne pas.

    Une autre idée ?

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    si tu as deja une classe CategoryLang,
    alors pour ne pas faire tout simplement un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      @OneToMany(mappedBy = "category")
      List<CategoryLang> categoryLang = new ArrayList<CategoryLang>();
    Eric

Discussions similaires

  1. Problème Migration BCB5 -> BCB6
    Par Xav++ dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2006, 10h02
  2. problème syntaxe requête select Hibernate
    Par Staron dans le forum Hibernate
    Réponses: 1
    Dernier message: 22/05/2006, 16h54
  3. Problème avec les requêtes hibernate
    Par joseph_p dans le forum Hibernate
    Réponses: 5
    Dernier message: 04/04/2006, 22h54
  4. Problème Migration Oracle
    Par bob_doulz dans le forum Administration
    Réponses: 4
    Dernier message: 20/04/2004, 09h56
  5. Réponses: 3
    Dernier message: 18/11/2002, 16h36

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