簡體   English   中英

如何測試Hibernate Session是否打開?

[英]How to test if Hibernate Session is open?

我遇到交易錯誤,例如:

org.hibernate.LazyInitializationException:無法延遲初始化角色集合:app.Parent.children,無法初始化代理-沒有會話

在此處parent.getChildren().size()

但是我在@Service方法上確實有@Transactional

  • createFactory()進行1次交易以創建工廠並提供給實體管理器
  • create()進行1次交易以創建實體
@Path("api/parents")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Controller
public class ParentResource {

    @Autowired
    private ParentService parentService;

    @POST
    public Parent create(Parent parent) {
        ParentFactory parentFactory = parentService.createFactory(parent);
        return parentService.create(parent);
    }

}

@Service
public class ParentService {

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public ParentFactory createFactory(Parent parent) {
        return new ParentFactory(parent, em);
    }

    @Transactional
    public Parent create(ParentFactory parentFactory) {
        return parentFactory.create();
    }

}

// No Transactional annotation
public class ParentFactory {

    private Parent parent;
    private EntityManager em;

    public ParentFactory(Parent parent, EntityManager em) {
        this.parent = parent;
        this.em = em;
    }

    public parent create() {
        if(parent.getChildren().size() < 3) { // Exception here
            em.persist(this.parent);
        }
    }

}

我希望能夠測試我的Hibernate會話何時存活,以便我可以檢查它何時丟失以及為什么丟失。

謝謝 !

我認為處理您要求的最佳方法是在children屬性上使用jpa驗證程序@Size(min = 3)

嘗試使用session.getTransaction()。isActive()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM