Jakarta ee 当我迁移到纯javaEE6时,对象引用了一个未保存的临时实例
我们有一个javaEE6应用程序,其开发方式如下: 为了简化,我们有以下实体交互、客户和标题。客户和标题链接如下:Jakarta ee 当我迁移到纯javaEE6时,对象引用了一个未保存的临时实例,jakarta-ee,jpa,jpa-2.0,java-ee-6,Jakarta Ee,Jpa,Jpa 2.0,Java Ee 6,我们有一个javaEE6应用程序,其开发方式如下: 为了简化,我们有以下实体交互、客户和标题。客户和标题链接如下: public class Customer { @Embedded @XmlElement(required = true) private Name name = new Name(); } @Embeddable public class Name { @NotNull @ManyToOne(fetch = FetchType.EAGE
public class Customer {
@Embedded
@XmlElement(required = true)
private Name name = new Name();
}
@Embeddable
public class Name {
@NotNull
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TITLE")
private Title title;
}
public class Title {
}
然后,我们对每个实体都有bean:InteractionBean、CustomerBean/CustomerBean、TitleBean/TitleBean都用ConversationScope注释
然后在客户页面中,我们有:
<p:selectOneMenu value="#{customer.name}">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{titlesBean.elements()}" var="elem" itemLabel="#{elem.label}" itemValue="#{elem}" />
</p:selectOneMenu>
在customer页面上,有一个next按钮,用于保存customer实体,但会抛出上述错误。看起来,尽管TitleBean和CustomerBean都用ConversationScope标记,但使用的entityManager是不同的。关于entityManager,它与所有其他服务一样,以默认范围注入到服务中
在它工作之前,但我们使用seam的注释:
@ExtensionManaged
@ConversationScoped
@Produces
@PersistenceUnit(unitName = "pu")
@MeveoJpa
EntityManagerFactory emf;
有什么建议吗
更新:
我目前正在研究PersistenceContext.EXTENDED+ConversationScope,但仍然无法使其正常工作
谢谢。第一印象
@SessionScoped和@ConversationScoped具有钝化功能。因此,由其中一个注释的bean必须实现可序列化以及bean成员属性 嗨,是的,很抱歉。是的,所有Bean和服务类都扩展了一个实现可序列化的基类。我已经解决了这个问题,因为entityManager的实例不同,这就是为什么标题实体从一个事务分离到另一个事务的原因。但我还没有任何解决方案。请使用注释PersistenceContext来注入实体管理器,而不是工厂的注释PersistenceUnit。是的,我实际上在JavaEE6中使用PersistenceContext。目前,我认为我将继续使用从seam管理的ExtensionManager,直到DeltaSpike发布。
@ExtensionManaged
@ConversationScoped
@Produces
@PersistenceUnit(unitName = "pu")
@MeveoJpa
EntityManagerFactory emf;