首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate MappingException:未知实体:MappingException

Hibernate MappingException:未知实体:MappingException
EN

Stack Overflow用户
提问于 2017-10-18 09:22:46
回答 1查看 748关注 0票数 2

我正在使用maven多模块项目。我将我的逻辑划分为不同的层、表示层、业务逻辑层、数据层,每个层都在一个单独的模块(层)中。当我尝试插入一个对象时,会发生以下异常:

com.xxxxx.service.model.Object$Proxy$_$$_WeldClientProxy : org.hibernate.MappingException:未知实体

这是如何造成的,我如何解决呢?

我使用CDI,应用程序基于JSF2和Hibernate。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 09:46:09

如果您有一个JPA实体,并且声明为CDI托管bean,则会发生此问题,如下所示:

代码语言:javascript
复制
@Named // Or @XxxScoped
@Entity
public class YourEntity {}

然后尝试持久化CDI托管bean实例,如下所示:

代码语言:javascript
复制
@Inject
private YourEntity yourCDIManagedEntity;

@PersistenceContext
private EntityManager entityManager;

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

这不是正确的方法。您不应该使实体成为CDI托管bean。A CDI managed bean is actually a proxy class。您可以在异常消息中清楚地看到这一点。它说它不知道实体com.xxxxx.service.model.Object$Proxy$_$$_WeldClientProxy,而不知道实体com.xxxxx.service.model.Object

代码语言:javascript
复制
@Entity // NO @Named nor @XxxScoped!
public class YourEntity {}

您应该将它准备为一个正常的实体实例,然后您可以将它安全地保存为一个正常的实体。

代码语言:javascript
复制
private YourEntity yourNormalEntity;

@PersistenceContext
private EntityManager entityManager;

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

public void save() {
    entityManager.persist(yourNormalEntity);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46806797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档