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

Hibernate:psqlexception:错误:列“this_.user_id”不存在[已关闭]

席安康
2023-03-14

我知道这个问题已经在stackoverflow上被问过很多次了,我已经把所有的问题都问过了。但对我没什么用。所以我又发这个问题了。我在Postgres有一张桌子。DDL在下面。

CREATE TABLE  APPUSERMASTER (
 USER_ID BIGSERIAL NOT NULL,
 USER_NAME VARCHAR(20) NOT NULL,
 FIRST_NAME VARCHAR(20) NOT NULL,
 SECOND_NAME VARCHAR(20) NOT NULL,
 EMAIL VARCHAR(50) NOT NULL,
 PASSWORD TEXT  NOT NULL,
 PRIMARY KEY (USER_ID) 
) ;

我的POJO类在下面。

@Entity
@Table(name = "appusermaster", schema = "public")
public class UserMaster implements java.io.Serializable {

private long userId;
private String userName;
private String firstName;
private String secondName;
private String email;
private String password;

public UserMaster() {
}

@Id
@Column(name = "user_id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getUserId() {
    return this.userId;
}

public void setUserId(long userId) {
    this.userId = userId;
}

@Column(name = "user_name", nullable = false, length = 20)
public String getUserName() {
    return this.userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

@Column(name = "first_name", nullable = false, length = 20)
public String getFirstName() {
    return this.firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

@Column(name = "second_name", nullable = false, length = 20)
public String getSecondName() {
    return this.secondName;
}

public void setSecondName(String secondName) {
    this.secondName = secondName;
}

@Column(name = "email", length = 50)
public String getEmail() {
    return this.email;
}

public void setEmail(String email) {
    this.email = email;
}

@Column(name = "password", length = 20)
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}

}

在我的DAO类中,我有以下代码。

public UserMaster getUserByUserName(String userName) {
    Criteria criteria = getSession().createCriteria(UserMaster.class); 
    criteria.add(Restrictions.eq("userName", userName));
    UserMaster userMaster = (UserMaster) criteria.uniqueResult();
    return userMaster;
}

但每当我执行这段代码时,我就会得到异常值以下的值。

[WARN ] 2017-07-18 18:24:23.105 [http-bio-8181-exec-9] SqlExceptionHelper - SQL Error: 0, SQLState: 42703
[ERROR] 2017-07-18 18:24:23.110 [http-bio-8181-exec-9] SqlExceptionHelper - ERROR: column this_.user_id does not exist
  Position: 8 org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: org.postgresql.util.PSQLException: ERROR: column this_.user_id does not exist
  Position: 8
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2412)

我打开了hibernate的show sql属性,下面是sql正在生成。

Hibernate: 
select
    this_.user_id as user_id1_0_0_,
    this_.email as email4_0_0_,
    this_.first_name as first_na5_0_0_,
    this_.password as password6_0_0_,
    this_.second_name as second_n7_0_0_,
    this_.user_name as user_nam9_0_0_ 
from
    public.appusermaster this_ 
where
    this_.user_name=?
[WARN ] 2017-07-18 19:22:40.797 [http-bio-8181-exec-12] SqlExceptionHelper - SQL Error: 0, SQLState: 42703
[ERROR] 2017-07-18 19:22:40.814 [http-bio-8181-exec-12] SqlExceptionHelper -     ERROR: column this_.user_id does not exist
  Position: 8

共有1个答案

堵凯
2023-03-14

日志显示的生成SQL正在从名为“usermaster”而不是“appusermaster”的表中选择记录

看起来它没有选择@table注释。如果您在java中更改了表的名称,可能是因为您的类文件已经过时,并且仍然引用旧的名称。

 类似资料:
  • 我实习要做一个Grails 3.3.0 web界面,用PostgreSQL版做数据库,spring-security-core 3 . 2 . 0版。我使用42.1.4版作为PostgreSQL的JDBC驱动程序。 我已经在我的Linux笔记本电脑上安装了PostgreSQL,并使用用户postgres创建了webInterfaceDev数据库。 然而,每次我想开始这个项目时,我都得到一个错误,即

  • 我已经能够将PostgreSQL链接到Java。我已经能够显示表中的所有记录,但我无法执行删除操作。 下面是我的代码: 请注意,MAC是一个字符串字段,用大写字母书写。表中确实存在此字段。 我得到的错误是: 严重:错误:“Mac”列不存在

  • 块(2个级别)in 'tasks:TOP=>db:migrate(请参阅通过运行任务与--trace进行完整跟踪) 我不知道这怎么可能,因为在方案文件中我没有张贴表。

  • :“查询执行失败。原因: SQL错误[42P01]:错误:关系”temp_table“存在。 不存在” 我想创建一个临时表来临时存储一些记录。

  • 问题内容: 我正在尝试在PostgreSQL 8.4.2 DB上运行hibernate模式。每当我尝试运行一个简单的Java代码,例如: 我收到以下错误: 由于我将选项hibernate.show_sql选项设置为true,因此可以看到hibernate尝试运行以下SQL命令: 实际上,它至少应运行以下命令: 有谁知道我需要进行哪些更改才能使Hibernate为PostgreSQL生成正确的SQL