Hibernate MappingException : Unknown entity: com. xxxxxx.service.model.$Proxy$_$$_WeldClientProxy

标签 hibernate jpa cdi mappingexception

我正在使用 Maven 多模块项目。 我将逻辑分为不同的层,表示层,业务逻辑层,数据层,每个层都在一个单独的模块(层)中。 当我尝试插入对象时,出现此异常:

org.hibernate.MappingException: Unknown entity: com.xxxxx.service.model.Object$Proxy$_$$_WeldClientProxy

这是怎么造成的,如何解决?

我正在使用 CDI bean,并且该应用程序基于 JSF2 和 Hibernate。

最佳答案

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

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

并且您尝试保留 CDI 托管 Bean 实例本身,如下所示:

@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.

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

您应该将其准备为普通实体实例,然后可以安全地将其作为普通实体持久保存。

private YourEntity yourNormalEntity;

@PersistenceContext
private EntityManager entityManager;

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

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

关于Hibernate MappingException : Unknown entity: com. xxxxxx.service.model.$Proxy$_$$_WeldClientProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806797/

相关文章:

java - 一对多关系支持读取但不支持插入

java - JPA 实体何时以及为什么应该实现 Serializable 接口(interface)?

spring - 使用 Spring Data JPA 进行延迟获取

java - Spring Data JPA 查询字符串组合(查询非常多或所有字段)

java - 查询集合交集

java - Hibernate/JPA 自动创建外键而不是在多对一关联中使用现有的外键

java - 两个依赖链 OSGI

java - CDI 生成方法 InjectionPoint 为 Null

jakarta-ee - Java EE bean 和 volatile 关键字

java - EJB 3.2/CDI 是否具有与 Spring 4 元注释等效的功能?