java为什么不能将数据持久化到数据库中
我得到:
Can not set java.lang.Integer field com.springboot.Model.departmentModel.id to com.springboot.Model.departmentModel
在我的Spring Boot项目中,试图将数据持久化到数据库中
申请。属性文件:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.jsp
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/college_management
spring.datasource.username=root
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
server.port=8099
部门模型类:
package com.springboot.Model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "department_master")
public class departmentModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String depname;
private String email;
private String password;
// getter and setter
}
admindao类:
package com.springboot.Dao;
import com.springboot.Model.departmentModel;
public interface adminDao {
void insertDepartment(departmentModel dModel);
}
admindaoImpl类:
package com.springboot.Dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.springframework.stereotype.Repository;
import com.springboot.Model.departmentModel;
@Repository
public class adminDaoImpl implements adminDao {
public void insertDepartment(departmentModel dModel) {
Configuration con = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(departmentModel.class);
SessionFactory sf = con.buildSessionFactory();
Session session = sf.openSession();
Transaction t = session.beginTransaction();
session.persist(dModel);
t.commit();
session.close();
}
}
adminService类:
package com.springboot.Service;
import com.springboot.Model.departmentModel;
public interface adminService {
public void insertDepartment(departmentModel dModel);
}
adminServiceImpl类:
package com.springboot.Service;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.Dao.adminDao;
import com.springboot.Model.departmentModel;
@Service
public class adminServiceImpl implements adminService {
@Autowired
private adminDao dao;
@Override
@Transactional
public void insertDepartment(departmentModel dModel) {
this.dao.insertDepartment(dModel);
}
}
adminController类:
package com.springboot.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.springboot.Model.departmentModel;
import com.springboot.Service.adminService;
@Controller
public class adminController {
@Autowired
private adminService service;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String homepg(Model mdl, @ModelAttribute departmentModel aModel) {
mdl.addAttribute("adminLogin", aModel);
return "registration";
}
@RequestMapping(value = "/insert", method = RequestMethod.POST, headers = "Accept=application/json")
public String insertDepartment(Model mdl, @ModelAttribute("dModel") departmentModel dModel) {
this.service.insertDepartment(dModel);
//mdl.addAttribute("adminLogin", dModel);
return "redirect:/";
}
}
注册。jsp文件:
<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
<meta charset="ISO-8859-1">
<title>College Management System</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet">
<link th:href="@{../css/style.css}" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-2"></div>
<div class="col-lg-6 col-md-8 login-box">
<div class="col-lg-12 login-key">
<i class="fa fa-key" aria-hidden="true"></i>
</div>
<div class="col-lg-12 login-title">REGISTRATION</div>
<div class="col-lg-12 login-form">
<div class="col-lg-12 login-form">
<form th:action="@{/insert}" th:object="${adminLogin}" method="post">
<div class="form-group">
<label class="form-control-label">DEPARTMENT NAME</label> <input
type="text" th:field="*{depname}" class="form-control">
</div>
<div class="form-group">
<label class="form-control-label">DEPARTMENT EMAIL</label> <input
type="email" th:field="*{email}" class="form-control">
</div>
<div class="form-group">
<label class="form-control-label">DEPARTMENT PASSWORD</label> <input
type="password" th:field="*{password}" class="form-control">
</div>
<div class="col-lg-12 loginbttm">
<div class="col-lg-6 login-btm login-button">
<button type="submit" class="btn btn-outline-primary">REGISTER</button>
</div>
</div>
</form>
</div>
</div>
<div class="col-lg-3 col-md-2"></div>
</div>
</div>
</div>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script>
</body>
</html>
错误:
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Integer com.springboot.Model.departmentModel.id] by reflection for persistent property [com.springboot.Model.departmentModel#id] : com.springboot.Model.departmentModel@72fd9d3a
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:75)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:5189)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4889)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:294)
at org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:59)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:95)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:99)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:720)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:706)
at com.springboot.Dao.adminDaoImpl.insertDepartment(adminDaoImpl.java:18)
at com.springboot.Dao.adminDaoImpl$$FastClassBySpringCGLIB$$ab6f421.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
... 68 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field com.springboot.Model.departmentModel.id to com.springboot.Model.departmentModel
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.base/java.lang.reflect.Field.get(Field.java:419)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:71)
... 85 more
共 (0) 个答案