【发布时间】: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