[英]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.