Best way to handle Hibernate Sessions in a layered Spring MVC Web application

前端 未结 2 889
别那么骄傲
别那么骄傲 2020-12-12 21:26

If we have a web application which has

  • heavy UI (Spring MVC + JQuery with JSON)
  • Hibernate with JPA annotations being the domain model
  • ext
2条回答
  •  北荒
    北荒 (楼主)
    2020-12-12 21:49

    • Use JPA EntityManager directly in your DAOs. Be sure not to mark it as Extended
    • Prefer and @Transactional - only on the service layer
    • The transaction manager also opens and closes sessions (if one doesn't exist already in the thread). Here it is good to know that sessions are session-per-request. Each request(=thread) has a separate session instance. But a database connection is created only if one is needed, so even if there is a transaction manager around all methods, needless connections won't be opened.
    • read-only transactions - use @Transactional(readOnly=true) in cases when there is only data retrieval
    • caching - utilize hibernate 2nd level cache to put entities in memory (instead of fetching them from the database each time)
    • avoid OpenSessionInView and lazy collections. This is subjective, but in my opinion all objects that leave the service layer must be initialized. For small collections (for ex. list of roles) you can have eager collections. For bigger collections use HQL queries.

提交回复
热议问题