休眠形成错误的查询插入

用户名

我有一个注册页面,该值是我试图将值插入mysql DB的值。

代码如下

控制器类

        @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'

知道我在哪里做错了吗?我是该技术的新手,因此是一个简单的问题,但是我觉得这里有轻微的错误,我无法弄清楚。

用户404

在您的表格中,列名称为,conpassword但在模型类中为cpassword可能是您后来更改了名称,而设置者仍然是这种方式。因此,您可以以相同的方式重命名它们,然后再次重新生成setter(以避免误解),删除tablebuilding/running再次尝试您的项目。

希望这会起作用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章