【问题标题】:Hibernate: PSQLException: Error: Column “this_.user_id” does not exist [closed]休眠:PSQLException:错误:列“this_.user_id”不存在[关闭]
【发布时间】:2017-12-23 10:00:02
【问题描述】:

我知道这个问题已经在 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 版本是 5.1.8.Final。 Spring 版本是 4.3.5。

我打开了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

【问题讨论】:

  • 也许这是一个愚蠢的建议,但请尝试将 return this.userId; 替换为 return userId;
  • @Berger 这对我来说一点也不愚蠢。如果您四处寻找此错误,您通常会看到某种表名前缀到无法找到的列。
  • @Berger 我从 getter 中删除了它,但它不起作用。谢谢
  • @GD_Java 可以设置调试以显示 SQL 语句本身。根据stackoverflow.com/questions/30118683/… 并在此处更新您的问题?
  • @GD_Java :事实上,在谈论“正确的数据库”时,我的意思是正确的主机+端口+数据库。很高兴问题得到解决:)

标签: java postgresql hibernate


【解决方案1】:

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

看起来它没有使用@Table 注释。如果您在 java 中更改了表的名称,则可能是您的类文件已过期并且仍在引用旧名称。

【讨论】:

  • 抱歉拼写错误。更正了。
  • @GD_Java 不是剪切粘贴?
  • 它是复制(从控制台),然后将其粘贴到编辑器(notepad++)中以正确格式化,然后复制并粘贴到此处。
  • 很遗憾,因为如果存在一个没有 user_id 列的 usermaster 表,那将是有意义的。
  • 我正在尝试解决这个问题。一旦我得到解决方案,我也会在这里发布。
猜你喜欢
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多