gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:56 26 4
gpt4 key购买 nike

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

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

并假设发生以下情况

  1. 使用默认的 HQSL 数据库
  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 将添加不存在的表和列。

更多详细信息可以在documentation中找到.

你的异常(exception)当你使用Hibernate并编写hibernate查询语句时,你必须使用HQL而不是SQL。 -- 主要区别是HQL是基于类而不是表。因此,在您的情况下,您不能使用 T_ORDER,而应使用 Order (对于 id 也是如此,您需要使用属性/字段名称,但不能使用列名称)。

关于java - 创建 SpringSource 工具套件 (STS) Hibernate 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4732760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com