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

在HIbernate中调用存储过程时未找到列“id”

夏祺然
2023-03-14

我在Mysql中创建了一个存储过程,并尝试使用J2EE/Hibernate调用该存储过程。在执行存储过程时,其显示me错误。

2018年03月04日上午12:06:18 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions错误:找不到列“ID”。

执行SP:org.hibernate.exception.sqlgrammareXception时发生错误:无法执行查询

我没有在存储过程中提到id,但它仍然显示关于id的错误。

@Entity
public class User {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String firstName;
private String lastName;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
}
public List<User> searchUserListWithSP(String firstName,String lastName) {

    List<User> userList = new ArrayList<>();
    try{
        SessionFactory factory = HibernateUtility.getSessionFactory();
        Session session = factory.getCurrentSession();
        session.beginTransaction();

        Query query = session.createSQLQuery("call getUserData(:firstName,:lastName)")      
                .addEntity(User.class)
                .setParameter("firstName", firstName)
                .setParameter("lastName", lastName);

        userList = query.list();

        System.out.println(userList);

    } catch(Exception e) {
        System.out.println("Error occured while executing SP : "+e);
    }
    System.out.println("UserDao @searchUserListWithSP -- END");
    return userList;
}

getUserData.sql(存储过程)

delimiter //

drop procedure if exists getUserData//
create procedure getUserData(
in firstName varchar(50),
in lastName varchar(50)
)
begin

declare queryString text default "";

set queryString = concat(queryString, 'select u.firstName, u.lastName from user u where 1=1');

if (firstName is not null and firstName != '') then
    set queryString = concat(queryString," and firstName like '%", firstName,"%' ");
end if;

if (lastName is not null and lastName != '') then
    set queryString = concat(queryString," and lastName like '%", lastName,"%' ");
end if;

set queryString = concat(queryString, ";");

-- select queryString;
SET @SQL := queryString;
prepare stmt from @SQL;
execute stmt;
deallocate prepare stmt;

end//

因此,在从UserDao执行存储过程时,我得到了这个错误。我已经找过了,但没有找到任何具体的东西。如果我在存储过程select语句中添加id,那么它将解决问题,但是对于其他字段显示错误。

共有1个答案

端木狐若
2023-03-14

请参阅本文,这将有助于理解addEntity()方法的概念

http://www.programering.com/a/mdm0ajmwaty.html

 类似资料:
  • 问题内容: 昨晚我刚刚开始学习hibernate,它相当有趣。我在使用hibernate将存储过程作为sql查询调用时遇到麻烦。我已附上来源和错误,请帮助我。谢谢 :) 这是Java文件::: 错误是::: 问题答案: 我基本上不使用hibernate的getNamedQuery重新设计输入,但是java.sql类可以正常工作!

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我有一个在包中定义的存储过程。该过程接受两个参数,一个是游标: 我是这样调用这个过程的: 它将返回以下错误: 你好,阿尼尔班。

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 我试图在Oracle 11g XE中执行存储包过程调用,但由于某些原因,我得到以下错误: 错误报告-ORA-02291:完整性约束(ROOT。SYS_C007057)违反-未找到父密钥ORA-06512:在"ROOT。BOOKS_STORE",第69行ORA-06512:第2行 *原因:外键值没有匹配的主键值。 *操作:删除外键或添加匹配的主键。 调用以下过程时: 该过程所做的是将数据插入表中。以

  • 我试图调用一个基本的oracle pl/sql存储过程,该过程从表student(姓名、年龄、电子邮件)返回一个字符串。我使用的是命名存储过程注释,但在执行逻辑时出错。谢谢你的帮助。 这就是我犯的错误 错误2864---[nio-8080-exec-1]o.a.c.c.c.[/]。[dispatcherServlet]:Servlet。路径为[]的上下文中servlet[dispatcherSer