我正在使用maven多模块项目。我将我的逻辑划分为不同的层、表示层、业务逻辑层、数据层,每个层都在一个单独的模块(层)中。当我尝试插入一个对象时,会发生以下异常:
com.xxxxx.service.model.Object$Proxy$_$$_WeldClientProxy : org.hibernate.MappingException:未知实体
这是如何造成的,我如何解决呢?
我使用CDI,应用程序基于JSF2和Hibernate。
发布于 2017-10-18 09:46:09
如果您有一个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);
}https://stackoverflow.com/questions/46806797
复制相似问题