2017-10-18 11 views
2

J'utilise le projet multimodule maven. J'ai divisé ma logique en différentes couches, Présentation, Business logique, couche de données, chacune dans un module séparé (couche). Lorsque je tente d'insérer un objet, cette exception se produit:

org.hibernate.MappingException: entité inconnue: com.xxxxx.service.model.Object $ Proxy $ _ $$ _ WeldClientProxy

Comment cela est-il causé et comment puis-je le résoudre? J'utilise le bean CDI et l'application est basée sur JSF2 et Hibernate.

+1

montrer votre code où vous insérez objet et pleine exception – z21

+0

voir https://stackoverflow.com/questions/23214454/org-hibernate-mappingexception-unknown-entity-annotations-users – trunkc

+0

Bienvenue sur StackOverflow! Veuillez consulter les [guides pour poser des questions] (https://stackoverflow.com/help/asking), en particulier [comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcv) – AesSedai101

Répondre

3

Ce problème se produira lorsque vous avez une entité JPA qui est également déclarée comme un CDI bean géré comme ci-dessous:

@Named // Or @XxxScoped 
@Entity 
public class YourEntity {} 

Et vous essayez de persister le CDI géré par exemple de haricot lui-même comme ci-dessous:

@Inject 
private YourEntity yourCDIManagedEntity; 

@PersistenceContext 
private EntityManager entityManager; 

public void save() { 
    entityManager.persist(yourCDIManagedEntity); 
} 

Ce n'est pas la bonne façon. Vous ne devriez pas faire de votre entité un bean géré par CDI. A CDI managed bean is actually a proxy class. Vous pouvez clairement le voir dans votre message d'exception. Il dit qu'il ne connaît pas l'entité com.xxxxx.service.model.Object$Proxy$_$$_WeldClientProxy au lieu de cela il ne connaît pas l'entité com.xxxxx.service.model.Object.

@Entity // NO @Named nor @XxxScoped! 
public class YourEntity {} 

Et vous devriez le préparer comme une instance d'entité normale, puis vous pouvez le conserver en toute sécurité en tant qu'entité normale.

private YourEntity yourNormalEntity; 

@PersistenceContext 
private EntityManager entityManager; 

@PostConstruct 
public void init() { 
    yourNormalEntity = new YourEntity(); 
} 

public void save() { 
    entityManager.persist(yourNormalEntity); 
} 
+0

Great BalusC. Votre solution est exactement ce dont j'ai besoin. Ça marche pour moi maintenant . Je vous remercie. – majdi