天天看點

Spring使用記憶體資料庫二

第一步:将HibernateConfiguration類修改為JpaConfiguration類

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

<code>@Configuration</code>

<code>public</code> <code>class</code> <code>JpaConfiguration {</code>

<code>    </code><code>@Autowired</code>

<code>    </code><code>private</code> <code>DataSource dataSource;</code>

<code>    </code><code>@Bean</code>

<code>    </code><code>public</code> <code>Map&lt;String, Object&gt; jpaProperties() {</code>

<code>        </code><code>Map&lt;String, Object&gt; props = </code><code>new</code> <code>HashMap&lt;String, Object&gt;();</code>

<code>        </code><code>//Hibernate JPA properties</code>

<code>           </code> 

<code>        </code><code>/*props.put("hibernate.dialect", H2Dialect.class.getName());</code>

<code>        </code><code>props.put("hibernate.cache.provider_class", HashtableCacheProvider.class.getName());*/</code>

<code>        </code><code>//EclipseLink JPA properties</code>

<code>        </code><code>props.put("eclipselink.weaving", "false");    </code>

<code>        </code><code>return props;</code>

<code>    </code><code>}</code>

<code>    </code><code>public JpaVendorAdapter jpaVendorAdapter() {      </code>

<code>        </code><code>//Hibernate JPA Vendor Adapter</code>

<code>        </code><code>/*AbstractJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();*/</code>

<code>        </code><code>//EclipseLink JPA Vendor Adapter</code>

<code>        </code><code>AbstractJpaVendorAdapter jpaVendorAdapter = new EclipseLinkJpaVendorAdapter();</code>

<code>            </code> 

<code>        </code><code>//Common vendor settings</code>

<code>        </code><code>jpaVendorAdapter.setShowSql(false);</code>

<code>        </code><code>jpaVendorAdapter.setGenerateDdl(true);</code>

<code>        </code><code>jpaVendorAdapter.setDatabase(Database.H2);//指定資料庫為 H2</code>

<code>        </code><code>return jpaVendorAdapter;      </code>

<code>    </code><code>public PlatformTransactionManager transactionManager() {</code>

<code>        </code><code>return new JpaTransactionManager( localContainerEntityManagerFactoryBean().getObject() );</code>

<code>    </code><code>public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {</code>

<code>        </code><code>LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();</code>

<code>        </code><code>lef.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());</code>

<code>        </code><code>lef.setDataSource(this.dataSource);</code>

<code>        </code><code>lef.setJpaPropertyMap(this.jpaProperties());</code>

<code>        </code><code>lef.setJpaVendorAdapter(this.jpaVendorAdapter());</code>

<code>        </code><code>return lef;</code>

<code>       </code> 

<code>    </code><code>/**</code>

<code>     </code><code>* 設定資料源,可以指定類型為Derby或HSQLDB</code>

<code>     </code><code>* @return</code>

<code>     </code><code>*/</code>

<code>    </code><code>public</code> <code>DataSource dataSource(){</code>

<code>        </code><code>EmbeddedDatabaseBuilder builder = </code><code>new</code> <code>EmbeddedDatabaseBuilder();</code>

<code>        </code><code>builder.setType(EmbeddedDatabaseType.H2);</code>

<code>        </code><code>return</code> <code>builder.build();</code>

<code>}</code>

第二步:修改OrderPersistenceTests類

将org.hibernate.Session類的API操作修改為javax.persistence.EntityManager類的API

org.hibernate.Session類的API代碼示例:

<code>@Autowired</code>

<code>    </code><code>private</code> <code>SessionFactory sessionFactory;</code>

<code>    </code><code>@Test</code>

<code>    </code><code>@Transactional</code>

<code>    </code><code>public</code> <code>void</code> <code>testSaveOrderWithItems() </code><code>throws</code> <code>Exception {</code>

<code>        </code><code>Session session = sessionFactory.getCurrentSession();</code>

<code>        </code><code>Order order = </code><code>new</code> <code>Order();</code>

<code>        </code><code>order.getItems().add(</code><code>new</code> <code>Item());</code>

<code>        </code><code>session.save(order);</code>

<code>        </code><code>session.flush();</code>

<code>        </code><code>assertNotNull(order.getId());</code>

javax.persistence.EntityManager類的API代碼示例:

<code>@PersistenceContext</code>

<code>    </code><code>private</code> <code>EntityManager entityManager;</code>

<code>        </code><code>entityManager.persist(order);</code>

<code>        </code><code>entityManager.flush();</code>

第三步:修改Maven依賴,可以參考附件。

修改完成,可以開始運作測試用例進行調試!總感覺EclipseLink是個半成品,不是很好使,甲骨文公司還是希望Everybody使用TopLink!

<a href="http://down.51cto.com/data/2363913" target="_blank">附件:http://down.51cto.com/data/2363913</a>

     本文轉自sarchitect 51CTO部落格,原文連結:http://blog.51cto.com/stevex/1343969,如需轉載請自行聯系原作者