我有這個類,它致力於通過持久層的休眠數據在數據庫中持久化。事務沒有激活 - 休眠 - JPA
public class TLinkEquipementDAOImpl implements TLinkEquipementDAO {
private static final Log log = LogFactory
.getLog(TLinkEquipementDAOImpl.class);
@PersistenceContext
private EntityManagerFactory emf = PersistenceManager.getInstance()
.getEntityManagerFactory();
private EntityManager entityManager = emf.createEntityManager();
private EntityTransaction tx = entityManager.getTransaction();
public void persist(TLinkEquipement transientInstance) {
log.debug("persisting TLinkEquipement instance");
try {
tx.begin();
entityManager.persist(transientInstance);
tx.commit();
log.debug("persist successful");
} catch (RuntimeException re) {
tx.rollback();
log.error("persist failed", re);
throw re;
}
}
//Staff
}
問題是它沒有保存數據。
堆棧是:
Exception in thread "main" java.lang.IllegalStateException: Transaction not active
at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:82)
at sau.se.domain.dao.Impl.TLinkEquipementDAOImpl.persist(TLinkEquipementDAOImpl.java:47)
at sau.se.domain.service.Impl.TLinkEquipementServiceImpl.persist(TLinkEquipementServiceImpl.java:29)
at sau.se.extractor.InfoExtract.getAllSPData(InfoExtract.java:346)
at sau.se.extractor.InfoExtract.main(InfoExtract.java:436)
但我要指出,這在其他類工作正常。
UPDATE:
當我做的tx.isActive()
打印它給了我false
。
UPDATE
我想更多獲取有關該錯誤的一些信息:
我得到了問題的所在:
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: sau.se.domain.model.TLinkEquipement.TEquipementsByIdEquipement2 -> sau.se.domain.model.TEquipements
at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:376)
其實
,表TLinkEquipement
有2 FK到同表TEquipements
和我,我堅持數據TEquipements
那麼那些TLinkEquipement
請參閱更新請求 –
回答擴展 – rzymek
它沒有問題,事實上,它不是一個J2EE應用程序,它只是一個使用Hibernate作爲持久層來保存un mysql db的swing應用程序。正如我所說,ti與其他一些類的工作正常(我在Hibernate中是newbye) –