0
我遇到了JavaEE應用程序的麻煩。我在TomEE上運行Hibernate + Jersey。在JPA + JAX-RS上獲取javax.persistence.TransactionRequiredException
這是我的基類:
public abstract class BaseEntityManager<E, K>{
protected Class entityClass;
@PersistenceContext
protected EntityManager em;
public BaseEntityManager() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class) genericSuperclass.getActualTypeArguments()[0];
}
public EntityManager getManager() {
return em;
}
public void persist(E entity) { em.persist(entity); }
public void remove(E entity) { em.remove(entity); }
public E findById(K primaryKey) { return (E)em.find(entityClass, primaryKey); }
}
這是具體類型的類:
@Stateless
public class SomethingManager extends BaseEntityManager<SomethingEntity, Integer>{}
這裏是我的資源。我在我的JSONCreator中反序列化來自JSON的數據。有一些參考實體的ID。然後在方法「新」我嘗試堅持新的對象工作正常,但我不能將其他實體的關係合併回新對象(前面提到的引用實體的ID)。
@Path("/Something")
public class Something{
// Other entity managers here ....
@EJB
SomethingManager smm;
@EJB
OtherManager ttem;
@Secured
@POST
@Path("/new")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public SomethingEntity add(@Context HttpServletRequest req, SomethingEntity r)
{
...
try {
for (int i = 0; i < r.getOtherEntities().size(); i++) {
OtherEntity x = (r.getOtherEntities().get(i));
x = ttem.findById(x.getId());
x.getSomethingEntities().add(r);
ttem.getManager().merge(x);
}
}
catch (Exception e)
{
e.printStackTrace(); // TODO Intelligent logging
return null;
}
return r;
}
}
這會引發異常ttem.getManager()。merge(x);
什麼似乎是一個問題?
謝謝。
我實際上已經通過向Something添加UserTransaction @Resoruce然後將代碼包裝到begin()和commit()中來解決了這個問題。但我也會嘗試這個解決方案。謝謝 – Schnappi