code_junkie

Spring, Hibernate & JPA: Calling persist on entitymanager does not seem to commit to database

Nov 13th, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.57 KB | None | 0 0
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2. <property name="url" value="${jdbc.url}"/>
  3. <property name="driverClassName" value="${jdbc.driverClassName}"/>
  4. <property name="username" value="${jdbc.username}"/>
  5. <property name="password" value="${jdbc.password}"/>
  6. </bean>
  7.  
  8. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  9. <property name="dataSource" ref="dataSource" />
  10. <property name="persistenceUnitName" value="BankingWeb" />
  11. <property name="jpaVendorAdapter">
  12. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  13. <property name="generateDdl" value="true" />
  14. <property name="showSql" value="true" />
  15. <property name="databasePlatform" value="${hibernate.dialect}" />
  16. </bean>
  17. </property>
  18. </bean>
  19.  
  20. <tx:annotation-driven/>
  21.  
  22. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  23. <property name="entityManagerFactory" ref="entityManagerFactory"/>
  24. </bean>
  25.  
  26. <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
  27.  
  28. <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
  29.  
  30. <bean name="accountManager" class="ssel.banking.dao.jpa.AccountManager" />
  31. <bean name="userManager" class="ssel.banking.dao.jpa.UserManager" />
  32.  
  33. @Repository
  34. public class AccountManager implements IAccountManager {
  35.  
  36. @PersistenceContext private EntityManager em;
  37.  
  38. /* -- 8< -- Query methods omitted -- 8< -- */
  39.  
  40. public Account storeAccount(Account ac) {
  41. ac = em.merge(ac);
  42. em.persist(ac);
  43. return ac;
  44. }
  45. }
  46.  
  47. Account ac = new Account();
  48. ac.setId(mostRecent.getId()+1);
  49. ac.setUser(user);
  50. ac.setName(accName);
  51. ac.setDate(new Date());
  52. ac.setValue(0);
  53. ac = accountManager.storeAccount(ac);
  54. return ac;
  55.  
  56. @SuppressWarnings("serial")
  57. @Entity
  58. @NamedQueries({
  59. @NamedQuery(name = "Account.AllAccounts", query = "SELECT a FROM Account a"),
  60. @NamedQuery(name = "Account.Accounts4User", query = "SELECT a FROM Account a WHERE user=:user"),
  61. @NamedQuery(name = "Account.Account4Name", query = "SELECT a FROM Account a WHERE name=:name"),
  62. @NamedQuery(name = "Account.MaxId", query = "SELECT MAX(a.id) FROM Account a"),
  63. @NamedQuery(name = "Account.Account4Id", query = "SELECT a FROM Account a WHERE id=:id"),
  64. })
  65. public class Account extends AbstractNamedDomain {
  66. @Temporal(TemporalType.DATE)
  67. @Column(name = "xdate")
  68. private Date date;
  69.  
  70. private double value;
  71.  
  72. @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
  73. @JoinColumn(name="userid")
  74. private User user;
  75.  
  76. public User getUser() {
  77. return user;
  78. }
  79.  
  80. public void setUser(User user) {
  81. this.user = user;
  82. }
  83.  
  84. @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
  85. @OrderBy("date")
  86. private List<AccountActivity> accountActivity = new ArrayList<AccountActivity>();
  87.  
  88. public List<AccountActivity> getAccountActivity() {
  89. return accountActivity;
  90. }
  91.  
  92. public void setAccountActivity(List<AccountActivity> accountActivity) {
  93. this.accountActivity = accountActivity;
  94. }
  95.  
  96. public Date getDate() {
  97. return date;
  98. }
  99.  
  100. public void setDate(Date date) {
  101. this.date = date;
  102. }
  103.  
  104. public double getValue() {
  105. return value;
  106. }
  107.  
  108. public void setValue(double value) {
  109. this.value = value;
  110. }
  111.  
  112. public void addAccountActivity(AccountActivity activity) {
  113. // Make sure ordering is maintained, JPA only does this on loading
  114. int i = 0;
  115. while (i < getAccountActivity().size()) {
  116. if (getAccountActivity().get(i).getDate().compareTo(activity.getDate()) <= 0)
  117. break;
  118. i++;
  119. }
  120. getAccountActivity().add(i, activity);
  121. }
  122. }
  123.  
  124. @MappedSuperclass public abstract class AbstractNamedDomain extends AbstractDomain {
  125.  
  126. private String name;
  127.  
  128. public AbstractNamedDomain() {
  129.  
  130. }
  131.  
  132. public AbstractNamedDomain(String name) {
  133.  
  134. this.name = name;
  135. }
  136.  
  137. public String getName() {
  138. return name;
  139. }
  140.  
  141. public void setName(String name) {
  142. this.name = name;
  143. }
  144. }
  145.  
  146. @MappedSuperclass public abstract class AbstractDomain implements Serializable {
  147.  
  148. @Id @GeneratedValue
  149. private long id = NEW_ID;
  150.  
  151. public static long NEW_ID = -1;
  152.  
  153. public long getId() {
  154. return id;
  155. }
  156.  
  157. public void setId(long id) {
  158. this.id = id;
  159. }
  160.  
  161. public boolean isNew() {
  162.  
  163. return id==NEW_ID;
  164. }
  165. }
  166.  
  167. @TransactionManagement(TransactionManagementType.BEAN)
  168. public class AccountManager implements IAccountManager { ..}
  169.  
  170. @Resource
  171. private SessionContext sessionContext;
  172.  
  173. public Account storeAccount(Account ac) {
  174. sessionContext.getUserTransaction().begin();
  175. ac = em.merge(ac);
  176. em.persist(ac);
  177. sessionContext.getUserTransaction().commit();
  178. return ac;
  179. }
Add Comment
Please, Sign In to add comment