spring-mvc - 休眠形成查询错误以进行插入
问题描述
我有一个注册页面,我试图将值插入到 mysql 数据库中。
代码如下
控制器类
@RequestMapping(value="/register",method=RequestMethod.POST)
public String registerDetails(@ModelAttribute("register")Register register)
{
boolean result=registerService.registerDetails(register);
if(result)
return "register";
else
return "error";
}
服务类
@Override
@Transactional
public boolean registerDetails(Register register) {
// TODO Auto-generated method stub
registerDAO.registerDetails(register);
return true;
}
DAO Class
@Override
public boolean registerDetails(Register register) {
// TODO Auto-generated method stub
Session session = this.sessionFactory.getCurrentSession();
session.persist(register);
return true;
}
配置xml文件
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url"
value="jdbc:mysql://localhost:3306/nodedb" />
<beans:property name="username" value="root" />
<beans:property name="password" value="rJGonEQQCrshs81f5LJg0naD+wsG49slpGgldbRJRFo=" />
</beans:bean>
<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>com.journaldev.spring.model.Person</beans:value>
<beans:value>com.journaldev.spring.model.Register</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<beans:bean id="personDAO" class="com.journaldev.spring.dao.PersonDAOImpl">
<beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
</beans:bean>
<beans:bean id="personService" class="com.journaldev.spring.service.PersonServiceImpl">
<beans:property name="personDAO" ref="personDAO"></beans:property>
</beans:bean>
<beans:bean id="registerDAO" class="com.journaldev.spring.dao.RegisterDAOImpl">
<beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
</beans:bean>
<beans:bean id="registerService" class="com.journaldev.spring.service.RegisterServiceImpl">
<beans:property name="registerDAO" ref="registerDAO"></beans:property>
</beans:bean>
<context:component-scan base-package="com.journaldev.spring" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
</beans:bean>
Model class
package com.journaldev.spring.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Register")
public class Register {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String emailId;
private String fName;
private String lName;
private String password;
private String cpassword;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmailId() {
return emailId;
}
public void setEmailId(String emailId) {
this.emailId = emailId;
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConPassword() {
return cpassword;
}
public void setConPassword(String conPassword) {
this.cpassword = conPassword;
}
}
My DDL query
CREATE TABLE `Register` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emailId` varchar(50) NOT NULL DEFAULT '',
`fname` varchar(20) DEFAULT NULL,
`lname` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`conpassword` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
)
这是堆栈跟踪
Hibernate: insert into Register (cpassword, emailId, fName, lName,
password) values (?, ?, ?, ?, ?)
WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error:
1054, SQLState: 42S22
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column
'cpassword' in 'field list'
Jul 20, 2019 10:48:30 PM org.apache.catalina.core.StandardWrapperValve
invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path
[/SpringMVCHibernate] threw exception [Request processing failed;
nested
exception is org.hibernate.exception.SQLGrammarException: could not
execute statement] with root cause
java.sql.SQLSyntaxErrorException: Unknown column 'cpassword' in 'field
list'
知道我在哪里做错了吗?我是这项技术的新手,因此是一个简单的问题,但我觉得有一个小错误,我无法弄清楚。
解决方案
在您的表中,列名是conpassword
,但在模型类中是cpassword
。可能你后来改了名字,二传手还是那样。因此,您可以以相同的方式重命名它们,然后再次重新生成setter
(以避免误解),删除table
并再次尝试building/running
您的项目。
希望,这会奏效
推荐阅读
- react-native - 如何将Unity游戏导出为React Native?
- reactjs - 对使用 Salesforce 作为 React 的用户身份验证平台有何想法?
- postgresql - PostgreSQL - 从数据库转储中恢复一个备份表
- c++ - C++:std::list 之间的区别
和 std::list<*type> - javascript - Vue路由器水平滚动到哈希不起作用
- c# - 在同一页面中实现登录和注册 AspNet Core 脚手架应用
- reactjs - ESLint 错误:React 中的“验证中缺少道具”(用 PropTypes.checkPropTypes 替换它不能解决它)?
- javascript - 运行 react-native run-android 后:解决依赖关系需要永远完成
- python-3.x - 在 AWS Lambda 上安装软件包并将它们存储在 AWS S3 上
- delphi - Delphi - TPlannerMonthView 设置项目颜色