Java 创建SpringSource工具套件(STS)Hibernate模板

Java 创建SpringSource工具套件(STS)Hibernate模板,java,hibernate,spring,sts-springsourcetoolsuite,Java,Hibernate,Spring,Sts Springsourcetoolsuite,我已经使用Spring模板项目创建了Hibernate项目。创建了两个域对象,一个JUnit测试app-context.xml和persistence-context.xml。现在我注意到了这条线 并假设以下情况发生 使用默认的HQSL数据库 创建的两个模型Order.java和Item.java将在内存表T_Order和T_Item中自动创建,这些模型将根据对象上的注释进行映射。在自动创建的类中,测试方法之一如下 @Test @Transactional public void testSav

我已经使用Spring模板项目创建了Hibernate项目。创建了两个域对象,一个JUnit测试app-context.xml和persistence-context.xml。现在我注意到了这条线

并假设以下情况发生

使用默认的HQSL数据库 创建的两个模型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());
}
问题

我认为内存中的表是从域模型Order/Item创建并映射的,对吗?因此,session.flush将对象同步到内存中的物理表。。。。 这些表是否自动映射,因为如果我执行以下操作

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启动时的操作。例如,值更新将添加不存在的表和列

有关更多详细信息,请参阅

你的例外
当您使用Hibernate并编写Hibernate查询语句时,您必须使用HQL而不是SQL。-主要区别在于HQL基于类而不是表。因此,在您的情况下,您不能使用T_顺序,但相同的顺序用于id,您需要使用属性/字段名,而不是列名。

表格创建是Hibernate和其他JPA Provider的一项功能。它发生在应用程序/测试开始时。它与任何查询无关。即使您只在运行和配置Hibernate的情况下启动测试,它也可以创建表

如果Hibernate创建表,删除旧表一次,依此类推,这取决于它的配置:属性:Hibernate.hbm2ddl.auto用于Hibernate启动时的操作。例如,值更新将添加不存在的表和列

有关更多详细信息,请参阅

你的例外
当您使用Hibernate并编写Hibernate查询语句时,您必须使用HQL而不是SQL。-主要区别在于HQL基于类而不是表。因此,在您的情况下,您不能使用T_顺序,但相同的顺序用于id,您需要使用属性/字段名,但不能使用列名。

哦,我在HQL中错过了这一点,我的遗忘。非常感谢。最后一件事,这行吗?Order other1=Order session.CreateSqlQuerySelectfrom T_Order,其中Order_ID=?.setParameter0,Order.getId.uniqueResult@sonx:查询可以,但我认为强制转换是不可能的,因为本地queryes结果没有映射到对象。嗨,拉尔夫,如果ans旁边没有复选框,我如何投票给你的ans?@sonx:你需要更多的点数才能投票。你需要15个声望点来投票:哦,我在HQL上错过了这个,我的遗忘。非常感谢。最后一件事,这行吗?Order other1=Order session.CreateSqlQuerySelectfrom T_Order,其中Order_ID=?.setParameter0,Order.getId.uniqueResult@sonx:查询可以,但我认为强制转换是不可能的,因为本地queryes结果没有映射到对象。嗨,拉尔夫,如果ans旁边没有复选框,我如何投票给你的ans?@sonx:你需要更多的点数才能投票。你需要15个声望点才能投票:我该怎么做?我怎么投票?我怎么投票?我怎么投票?