Java EJB异常-尝试使用具有空会话的间接寻址遍历关系。
这不是一个新的例外。我在stack overflow中浏览了很多论坛帖子,了解了为什么会发生这种情况。但我需要帮助来解决我的问题 我有两个实体bean设备类和设备类。下面是代码Java EJB异常-尝试使用具有空会话的间接寻址遍历关系。,java,jakarta-ee,jpa,ejb,ejb-3.0,Java,Jakarta Ee,Jpa,Ejb,Ejb 3.0,这不是一个新的例外。我在stack overflow中浏览了很多论坛帖子,了解了为什么会发生这种情况。但我需要帮助来解决我的问题 我有两个实体bean设备类和设备类。下面是代码 public class EquipmentClass implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.
public class EquipmentClass implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "class_name")
private String className;
@Column(name = "description")
private String description;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "equipmentClass")
private Collection<Equipment> equipmentCollection;
// getter and setter methods
}
public class Equipment implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "created_on")
@Temporal(TemporalType.TIMESTAMP)
private Date createdOn;
@Basic(optional = false)
@Column(name = "updated_on")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedOn;
@JoinColumn(name = "equipment_class", referencedColumnName = "id")
@ManyToOne(optional = false)
private EquipmentClass equipmentClass;
// setter and getter methods
}
我在上面标记的(>><)行中遇到异常
如前所述,我尝试执行ec.getEquipmentCollection().size()代码>。但我有个例外
我应该如何进行?非常感谢您的帮助 我想如果您在检索设备
实例后添加设备.getEquipmentClass().getEquipmentCollection().size()
,它将解决您的问题
事实可能是,在调用getEquipmentCollection()的地方,persistence上下文不再可访问,但我需要有关上下文的其他信息来帮助您(ejb、事务上下文等).
您可以在引发异常的位置访问entityManager实例吗?需要equipmentFacade.create
方法内容。Imho它只是在方法调用处缺少持久性上下文的pb。getEntityManager().persist(entity);这正是create方法的内部。我实际上解决了这个问题。你的回答确实帮助我解决了这个问题。我所做的不是从equipment.getEquipmentClass()检索设备类对象代码>,我使用了equipmentClassFacade.find(equipment.getEquipmentClass().getId())代码>这帮助我获得设备类的当前持久对象。然后我简单地使用了ec.getEquipmentCollection().add(设备)代码>以添加对象。非常感谢你的回复。
EquipmentClass ec = equipment.getEquipmentClass();
>>> ec.getEquipmentCollection().add(equipment); <<
equipmentClassFacade.edit(ec);