Guest User

Untitled

a guest
Aug 29th, 2018
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.84 KB | None | 0 0
  1. Architecture to avoid Hibernate LazyInitializationExceptions
  2. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="dataSource" ref="dataSource"/>
  4. <property name="configLocation">
  5. <value>/WEB-INF/hibernate.cfg.xml</value>
  6. </property>
  7. <property name="configurationClass">
  8. <value>org.hibernate.cfg.AnnotationConfiguration</value>
  9. </property>
  10. <property name="hibernateProperties">
  11. <props>
  12. <prop key="hibernate.dialect">${hibernate.dialect}</prop>
  13. <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
  14. </props>
  15. </property>
  16. <property name="eventListeners">
  17. <map>
  18. <entry key="merge">
  19. <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
  20. </entry>
  21. </map>
  22. </property>
  23. </bean>
  24.  
  25. <bean id="dao" class="info.ems.hibernate.HibernateEMSDao" init-method="createSchema">
  26. <property name="hibernateTemplate">
  27. <bean class="org.springframework.orm.hibernate3.HibernateTemplate">
  28. <property name="sessionFactory" ref="sessionFactory"/>
  29. <property name="flushMode">
  30. <bean id="org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
  31. </property>
  32. </bean>
  33. </property>
  34. <property name="schemaHelper">
  35. <bean class="info.ems.hibernate.SchemaHelper">
  36. <property name="driverClassName" value="${database.driver}"/>
  37. <property name="url" value="${database.url}"/>
  38. <property name="username" value="${database.username}"/>
  39. <property name="password" value="${database.password}"/>
  40. <property name="hibernateDialect" value="${hibernate.dialect}"/>
  41. <property name="dataSourceJndiName" value="${database.datasource.jndiname}"/>
  42. </bean>
  43. </property>
  44. </bean>
  45.  
  46. <hibernate-configuration>
  47. <session-factory>
  48. <mapping class="info.ems.models.User" />
  49. <mapping class="info.ems.models.Role" />
  50. </session-factory>
  51. </hibernate-configuration>
  52.  
  53. @Entity
  54. @Table(name="ROLE")
  55. @Access(AccessType.FIELD)
  56. public class Role implements Serializable {
  57.  
  58. private static final long serialVersionUID = 3L;
  59.  
  60. @Id
  61. @Column(name="ROLE_ID", updatable=false, nullable=false)
  62. @GeneratedValue(strategy = GenerationType.IDENTITY)
  63. private long id;
  64.  
  65. @Column(name="USERNAME")
  66. private String username;
  67.  
  68. @Column(name="ROLE")
  69. private String role;
  70.  
  71. public long getId() {
  72. return id;
  73. }
  74.  
  75. public void setId(long id) {
  76. this.id = id;
  77. }
  78.  
  79. public String getUsername() {
  80. return username;
  81. }
  82.  
  83. public void setUsername(String username) {
  84. this.username = username;
  85. }
  86.  
  87. public String getRole() {
  88. return role;
  89. }
  90.  
  91. public void setRole(String role) {
  92. this.role = role;
  93. }
  94. }
  95.  
  96. @Entity
  97. @Table(name = "USER")
  98. @Access(AccessType.FIELD)
  99. public class User implements UserDetails, Serializable {
  100.  
  101. private static final long serialVersionUID = 2L;
  102.  
  103. @Id
  104. @Column(name = "USER_ID", updatable=false, nullable=false)
  105. @GeneratedValue(strategy = GenerationType.IDENTITY)
  106. private long id;
  107.  
  108. @Column(name = "USERNAME")
  109. private String username;
  110.  
  111. @Column(name = "PASSWORD")
  112. private String password;
  113.  
  114. @Column(name = "NAME")
  115. private String name;
  116.  
  117. @Column(name = "EMAIL")
  118. private String email;
  119.  
  120. @Column(name = "LOCKED")
  121. private boolean locked;
  122.  
  123. @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = Role.class)
  124. @JoinTable(name = "USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
  125. private Set<Role> roles;
  126.  
  127. @Override
  128. public GrantedAuthority[] getAuthorities() {
  129. List<GrantedAuthorityImpl> list = new ArrayList<GrantedAuthorityImpl>(0);
  130. for (Role role : roles) {
  131. list.add(new GrantedAuthorityImpl(role.getRole()));
  132. }
  133. return (GrantedAuthority[]) list.toArray(new GrantedAuthority[list.size()]);
  134. }
  135.  
  136. @Override
  137. public boolean isAccountNonExpired() {
  138. return true;
  139. }
  140.  
  141. @Override
  142. public boolean isAccountNonLocked() {
  143. return !isLocked();
  144. }
  145.  
  146. @Override
  147. public boolean isCredentialsNonExpired() {
  148. return true;
  149. }
  150.  
  151. @Override
  152. public boolean isEnabled() {
  153. return true;
  154. }
  155.  
  156. public long getId() {
  157. return id;
  158. }
  159.  
  160. public void setId(long id) {
  161. this.id = id;
  162. }
  163.  
  164. @Override
  165. public String getUsername() {
  166. return username;
  167. }
  168.  
  169. public void setUsername(String username) {
  170. this.username = username;
  171. }
  172.  
  173. @Override
  174. public String getPassword() {
  175. return password;
  176. }
  177.  
  178. public void setPassword(String password) {
  179. this.password = password;
  180. }
  181.  
  182. public String getName() {
  183. return name;
  184. }
  185.  
  186. public void setName(String name) {
  187. this.name = name;
  188. }
  189.  
  190. public String getEmail() {
  191. return email;
  192. }
  193.  
  194. public void setEmail(String email) {
  195. this.email = email;
  196. }
  197.  
  198. public boolean isLocked() {
  199. return locked;
  200. }
  201.  
  202. public void setLocked(boolean locked) {
  203. this.locked = locked;
  204. }
  205.  
  206. public Set<Role> getRoles() {
  207. return roles;
  208. }
  209.  
  210. public void setRoles(Set<Role> roles) {
  211. this.roles = roles;
  212. }
  213. }
  214.  
  215. public void saveUser(final User user) {
  216. getHibernateTemplate().execute(new HibernateCallback() {
  217.  
  218. @Override
  219. public Object doInHibernate(Session session) throws HibernateException, SQLException {
  220. session.flush();
  221. session.setCacheMode(CacheMode.IGNORE);
  222. session.save(user);
  223. session.flush();
  224. return null;
  225. }
  226. });
  227. }
  228.  
  229. public User getUser(final Long id) {
  230. return (User) getHibernateTemplate().execute(new HibernateCallback() {
  231.  
  232. @Override
  233. public Object doInHibernate(Session session) throws HibernateException, SQLException {
  234. return session.get(User.class, id);
  235. }
  236. });
  237. }
  238.  
  239. public User getUser(final Long id) {
  240. getHibernateTemplate().load(User.class, id);
  241. }
  242.  
  243. public void saveUser(final User user) {
  244. Session session = getSession();
  245. Transaction transaction = session.beginTransaction();
  246. session.save(user);
  247. transaction.commit();
  248. session.close();
  249. }
  250. public User getUser(final Long id) {
  251. Session session = getSession();
  252. session.enableFetchProfile("USER-ROLE-PROFILE");
  253. User user = (User) session.get(User.class, id);
  254. session.disableFetchProfile("USER-ROLE-PROFILE");
  255. session.close();
  256. return user;
  257. }
Add Comment
Please, Sign In to add comment