簡體   English   中英

創建SpringSource Tool Suite(STS)休眠模板

[英]Creating SpringSource Tool Suite (STS) Hibernate Template

我已經使用Spring Template Project創建了Hibernate項目。 創建了兩個域對象,一個JUnit測試,app-context.xml和persistence-context.xml。 現在我注意到這條線

<jdbc:embedded-database id="dataSource"></jdbc:embedded-database>

並假設發生以下情況

  1. 使用默認的HQSL db
  2. 創建的兩個模型Order.java和Item.java將在內存表T_ORDER和T_ITEM中自動創建,並且這些模型將根據對象上的注釋進行映射。 在自動創建的類中,測試方法之一如下

     @Test @Transactional public void testSaveAndGet() throws Exception { Session session = sessionFactory.getCurrentSession(); Order order = new Order(); order.getItems().add(new Item()); session.save(order); session.flush(); // Otherwise the query returns the existing order // (and we didn't set the parent in the item)... session.clear(); Order other = (Order) session.get(Order.class, order.getId()); assertEquals(1, other.getItems().size()); assertEquals(other, other.getItems().iterator().next().getOrder()); } 

問題...

  1. 我是否正確認為內存表是根據域模型(訂單/項目)創建並映射的? 因此session.flush()將對象同步到物理(在內存表中)。
  2. 這些表是否自動映射,因為如果我執行以下操作

     session.save(order); session.flush(); session.clear(); Order other = (Order) session .createQuery("from T_ORDER where ORDER_ID =: orderid") .setLong("orderid", order.getId()) .uniqueResult(); 

我有一個例外...

org.hibernate.hql.ast.[B]QuerySyntaxException[/B]: \
T_ORDER is not mapped [from T_ORDER where ORDER_ID =: orderid]
............
............

如果這些表沒有自動映射,那么刷新首先如何工作?

表創建是Hibernate(和其他JPA提供者)的功能。 它在應用程序/測試開始時發生。 它與任何查詢無關。 即使僅在運行和配置Hibernate的情況下開始測試,它也可以創建表。

如果Hibernate創建表,一次刪除舊表,依此類推,則取決於它的配置:屬性: hibernate.hbm2ddl.auto用於啟動hibernate時所執行的操作。 例如,值update將添加不存在的表和列。

可以在文檔中找到更多詳細信息。

異常當您使用Hibernate並編寫休眠查詢語句時,則必須使用HQL而不是SQL。 -主要區別在於HQL是基於類而不是基於表的。 因此,在您的情況下,您不能使用T_ORDER ,而應該使用Order (對於id來說,相同,您需要使用屬性/字段名稱,但不能使用列名稱)。

暫無
暫無

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

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