当前位置: 首页 > 知识库问答 >
问题:

org.H2.jdbc.jdbcsqlexception:在使用H2数据库进行测试时未找到列“id”

冀萧迟
2023-03-14

就我所知,我认为这与@id注释的H2解释有关,但不明白为什么,所以任何帮助都将不胜感激...

NB-我已经搜索堆栈溢出相当广泛,包括有关使用双引号列规范的问题,但不要认为这与我的情况有关...

CREATE TABLE History.Status_Report (
Id INT NOT NULL AUTO_INCREMENT,
Unique_Users INT NOT NULL,
PRIMARY KEY (Id) 
);
CREATE PROCEDURE History.Status_Reporting(reporting_date DATE)
          
BEGIN
    
INSERT INTO history.status_report (Unique_Users) VALUES (10);
SELECT *
     FROM History.Status_Report WHERE Id = LAST_INSERT_ID();
END;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;
import java.io.Serializable;

@NamedNativeQuery(name = "callStatusReporting", query = "CALL Status_Reporting(:reporting_date)", resultClass = StatusReportEntity.class)
@Entity
@Table(name = "Status_Report", catalog = "History")
public class StatusReportEntity implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name = "Id")
    protected Integer id;
    @Column(name = "Unique_Users")
    protected int uniqueUsers;

    public Integer getId() {
        return this.id;
    }

    public int getUniqueUsers() {
        return this.uniqueUsers;
    }
}
package com.test;

import org.hibernate.Query;
import org.hibernate.Session;

public class MyListener {

    public StatusReportEntity doRequest(Date reportDate) {
        Session session = HibernateUtil.openSession(); // returns a MySQL session or H2 if testing…        
        try {
            Query query = session.getNamedQuery("callStatusReporting").setParameter("reporting_date", reportDate);;
            StatusReportEntity statusReportEntity = (StatusReportEntity) query.uniqueResult();
            return statusReportEntity;
        } catch (Exception e) {
            System.err.println(e);
        } finally {
            session.close();
            return null;
        }
    }
CREATE SCHEMA IF NOT EXISTS History;
CREATE ALIAS IF NOT EXISTS Status_Reporting FOR "com.test.StoredProcs.statusReporting";

和从SP调用返回默认结果的测试类:

package com.test;

import com.test.StatusReportEntity;

public class StoredProcs {

    public static StatusReportEntity statusReporting(Date reportingDate) {
        StatusReportEntity statusReportEntity = StatusReportEntity.builder().withId(1).withUniqueUsers(10).build();
        return statusReportEntity;
    }
}

测试类

package com.test;

import com.test.MyListener;
import java.util.Calendar;
import org.junit.Test;
import static org.junit.Assert.*;

public class MyListenerTest {

    private MyListener listener;

    @Test
    public void listenerReturnsLatestData() throws Exception {
        MyListener myListener = new MyListener();
        assertNotNull(myListener.statusReporting(Calendar.getInstance().getTime()));
    }
}

共有1个答案

江天宇
2023-03-14

创建表PERSON(PERSON_IDidentity主键、GIVEN_NAME VARCHAR(20)、FIRST_NAME VARCHAR(20)、MIDDLE_NAME VARCHAR(20)、LAST_NAME VARCHAR(20)、TITLE VARCHAR(20)、NAME_SUFFIX VARCHAR(20));

The entity class must use any Generation strategy.
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name ="PERSON_ID")
private int personId;
 类似资料:
  • org.h2.jdbc.JdbcSQLException:未找到函数"TO_CHAR";SQL声明:我使用的是oracle 12c数据库和spr java框架。但是这个问题与oracle数据库有关。这是sql查询。 如何修复此错误?请帮帮我。谢谢这是我的密码。 这是getConnection函数。 这是AbstractDao。Java语言

  • 我正在尝试使用嵌入式h2 db运行我的应用程序。 我得到以下错误: 我已经试过了: 从. m2本地文件夹中删除h2存储库并重新导入并重新安装-未成功。 我还尝试使用以下内容配置属性文件: spring.datasource.driver类 Spring数据源。url=jdbc:h2:mem:testdb Springjpa。冬眠ddl auto=create spring.jpa.show-sql

  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 这是Wildfly10.0中Hibernate版本不匹配的后续问题。 [org.jboss.as.server.deployment](MSC服务线程1-8)WFLYSRV0027:开始部署“webapi.war”(运行时名称:“webapi.war”) [org.jboss.as.jpa](MSC服务线程1-1)WFlyJPA0002:为应用程序读取persistence.xml [org.jb

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!