[英]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>
並假設發生以下情況
創建的兩個模型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()); }
問題...
這些表是否自動映射,因為如果我執行以下操作
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.