繁体   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