我需要通过查询file从数据库中获取对象列表。GET有两个类:
File:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.persistence.*;
import java.io.IOException;
import java.util.Objects;
@Entity
@Table(name = "FILE_")
public class File {
private Long id;
private Long storageId;
private String name;
private String format;
private Long size;
private Storage storage;
public File() {
}
@Id
@SequenceGenerator(name = "F_SQ", sequenceName = "FILE_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "F_SQ")
@Column(name = "FILE_ID")
public Long getId() {
return id;
}
@JsonIgnore
//@JoinColumn(name = "STORAGE_ID_F")
public Long getStorageId() {
return storageId;
}
@Column(name = "NAME_FILE")
public String getName() {
return name;
}
@Column(name = "FORMAT_FILE")
public String getFormat() {
return format;
}
@Column(name = "SIZE_FILE")
public Long getSize() {
return size;
}
@JsonIgnore
@ManyToOne(targetEntity = Storage.class, fetch = FetchType.LAZY)
@JoinColumn(name = "STORAGE_ID_F")
public Storage getStorage() {
return storage;
}
@JsonCreator
public static File createFromJson(String jsonString){
ObjectMapper objectMapper = new ObjectMapper();
File file = null;
try {
file = objectMapper.readValue(jsonString, File.class);
}catch (IOException e){
e.printStackTrace();
}
return file;
}
public void setId(Long id) {
this.id = id;
}
public void setStorageId(Long storageId) {
this.storageId = storageId;
}
public void setName(String name) {
this.name = name;
}
public void setFormat(String format) {
this.format = format;
}
public void setSize(Long size) {
this.size = size;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
File file = (File) o;
return Objects.equals(storageId, file.storageId) &&
Objects.equals(name, file.name) &&
Objects.equals(format, file.format) &&
Objects.equals(size, file.size) &&
Objects.equals(storage, file.storage);
}
@Override
public int hashCode() {
return Objects.hash(storageId, name, format, size, storage);
}
@Override
public String toString() {
return "File{" +
"id=" + id +
" name='" + name + '\'' +
", format='" + format + '\'' +
", size=" + size +
", storage=" + storage.getId() +
'}';
}
}
Storage:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.persistence.*;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name = "STORAGE_")
public class Storage {
private Long id;
private String formatsSupported;
private String storageCountry;
private Long storageSize;
private List<File> files;
public Storage() {
}
@Id
@SequenceGenerator(name = "ST_SQ", sequenceName = "STORAGE_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ST_SQ")
@Column(name = "STORAGE_ID")
public Long getId() {
return id;
}
@Column(name = "FORMAT_SUPPORTED")
public String getFormatsSupported() {
return formatsSupported;
}
@Column(name = "COUNTRY_STORAGE")
public String getStorageCountry() {
return storageCountry;
}
@Column(name = "SIZE_STORAGE")
public Long getStorageSize() {
return storageSize;
}
@OneToMany(mappedBy = "storage", fetch = FetchType.LAZY, targetEntity = File.class)
public List<File> getFiles() {
return files;
}
@JsonCreator
public static Storage createFromJson(String jsonString){
ObjectMapper objectMapper = new ObjectMapper();
Storage storage = null;
try {
storage = objectMapper.readValue(jsonString, Storage.class);
}catch (IOException e){
e.printStackTrace();
}
return storage;
}
public void setId(Long id) {
this.id = id;
}
public void setFormatsSupported(String formatsSupported) {
this.formatsSupported = formatsSupported;
}
public void setStorageCountry(String storageCountry) {
this.storageCountry = storageCountry;
}
public void setStorageSize(Long storageSize) {
this.storageSize = storageSize;
}
public void setFiles(List<File> files) {
this.files = files;
}
}
在类Controller中,一个方法请求从数据库中获取对象列表,使用数据库Oracle:
import com.fasterxml.jackson.databind.ObjectMapper;
import dz_spring_3.dao.FileDAO;
import dz_spring_3.dao.StorageDAO;
import dz_spring_3.model.File;
import dz_spring_3.model.Storage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
@org.springframework.stereotype.Controller
public class Controller {
@Autowired
Service service;
@Autowired
StorageDAO storageDAO;
@Autowired
FileDAO fileDAO;
@RequestMapping(method = RequestMethod.POST, value = "/saveFile", produces = "text/plain")
@ResponseBody
public String saveFile(HttpServletRequest req)throws IOException {
File file = mappingFile(req);
if (file.getId() != null)
return "Storage with id - " + file.getId() + " can`t be saved in DB.";
file.setStorageId(storageDAO.findById(3L).getId());
service.saveFile(file);
return "File with id - " + file.getId() + " saved success.";
}
@RequestMapping(method = RequestMethod.GET, value = "/file", produces = "text/plain")
@ResponseBody
public String getAllFile(){
return service.getAllFile().toString();
}
private File mappingFile(HttpServletRequest req)throws IOException {
StringBuilder stringBuilder = new StringBuilder();
try(BufferedReader reader = req.getReader()) {
String line;
while ((line = reader.readLine()) != null){
System.out.println("Line in wile (mapping) - " + line);
stringBuilder.append(line);
}
}
ObjectMapper objectMapper = new ObjectMapper();
String input = objectMapper.writeValueAsString(stringBuilder.toString());
File file = objectMapper.convertValue(input, File.class);
return file;
}
类FileDAO:
import dz_spring_3.model.File;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import javax.persistence.TypedQuery;
import java.util.List;
public class FileDAO extends GeneralDAO<File> {
private static final String SQL_GET_ALL_FILES = "SELECT * FROM FILE_";
private static final String SQL_GET_BY_ID_FILE = "SELECT * FROM FILE_ WHERE FILE_ID = ?";
@SuppressWarnings("unchecked")
public List<File> getAllFile(){
List<File> files;
try(Session session = createSessionFactory().openSession()) {
NativeQuery query = session.createNativeQuery(SQL_GET_ALL_FILES);
files = query.addEntity(File.class).list();
}catch (HibernateException e){
System.err.println(e.getMessage());
throw new HibernateException("Operation failed");
}
return files;
}
public File saveFile(File file) {
Transaction tr = null;
try(Session session = createSessionFactory().openSession()) {
tr = session.getTransaction();
tr.begin();
session.save(file);
tr.commit();
}catch (HibernateException e){
System.err.println("Save is failed.");
System.err.println(e.getMessage());
if (tr != null)
tr.rollback();
}
return file;
}
public void updateFile(File file){
Transaction transaction = null;
try(Session session = createSessionFactory().openSession()) {
transaction = session.getTransaction();
transaction.begin();
session.update(file);
transaction.commit();
}
catch (HibernateException e){
if (transaction != null)
transaction.rollback();
System.err.println(e.getMessage());
throw new HibernateException("Operation failed.");
}
}
public void deleteFile(Long id){
Transaction transaction = null;
try(Session session = createSessionFactory().openSession()) {
transaction = session.getTransaction();
transaction.begin();
session.delete(findById(id));
transaction.commit();
}
catch (HibernateException e){
if (transaction != null)
transaction.rollback();
System.err.println(e.getMessage());
throw new HibernateException("Operation failed.");
}
}
@SuppressWarnings("unchecked")
public File findById(Long id){
File file;
try(Session session = createSessionFactory().openSession()) {
NativeQuery query = session.createNativeQuery(SQL_GET_BY_ID_FILE);
if (getSingleResult(query, id) == null){
file = null;
}
else
file = (File) query.addEntity(File.class).setParameter(1, id).getSingleResult();
}catch (HibernateException e){
System.err.println(e.getMessage());
throw new HibernateException("Operation failed.");
}
return file;
}
private <T> T getSingleResult(TypedQuery<T> query, Long id){
query.setMaxResults(1);
List<T> list = query.setParameter(1, id).getResultList();
if (list == null || list.isEmpty()){
return null;
}
return list.get(0);
}
}
在我启动服务器Tomcat并发出请求
http://localhost:8080/file后,出现了几个错误,这是堆栈跟踪:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
dz_spring_3.Service.getAllFile(Service.java:56)
dz_spring_3.Controller.getAllFile(Controller.java:111)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
org.hibernate.exception.GenericJDBCException: could not execute query
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
org.hibernate.loader.Loader.doList(Loader.java:2695)
org.hibernate.loader.Loader.doList(Loader.java:2675)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
org.hibernate.loader.Loader.list(Loader.java:2502)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161)
org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
dz_spring_3.Service.getAllFile(Service.java:56)
dz_spring_3.Controller.getAllFile(Controller.java:111)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.sql.SQLException: Недопустимое имя столбца
oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3965)
oracle.jdbc.driver.InsensitiveScrollableResultSet.findColumn(InsensitiveScrollableResultSet.java:299)
oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:1361)
org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63)
org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)
org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:333)
org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2854)
org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1747)
org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1673)
org.hibernate.loader.Loader.getRow(Loader.java:1562)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:732)
org.hibernate.loader.Loader.processResultSet(Loader.java:991)
org.hibernate.loader.Loader.doQuery(Loader.java:949)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
org.hibernate.loader.Loader.doList(Loader.java:2692)
org.hibernate.loader.Loader.doList(Loader.java:2675)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
org.hibernate.loader.Loader.list(Loader.java:2502)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161)
org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
dz_spring_3.Service.getAllFile(Service.java:56)
dz_spring_3.Controller.getAllFile(Controller.java:111)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
据我了解,这个问题是由于字段storageId,当我完全删除它时,会读取数据库中的数据。但是我需要这个字段,以便将对象存储在数据库中以file访问该文件所在id的存储空间。storage好吧,当您尝试file通过请求保存到数据库时Post,也会出现错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
org.hibernate.query.Query.getResultList(Query.java:146)
dz_spring_3.dao.StorageDAO.getSingleResult(StorageDAO.java:119)
dz_spring_3.dao.StorageDAO.findById(StorageDAO.java:103)
dz_spring_3.Controller.saveFile(Controller.java:98)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:115)
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:199)
org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.afterTransaction(LogicalConnectionManagedImpl.java:162)
org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.afterTransaction(JdbcCoordinatorImpl.java:288)
org.hibernate.internal.SessionImpl.afterOperation(SessionImpl.java:557)
org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2168)
org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
org.hibernate.query.Query.getResultList(Query.java:146)
dz_spring_3.dao.StorageDAO.getSingleResult(StorageDAO.java:119)
dz_spring_3.dao.StorageDAO.findById(StorageDAO.java:103)
dz_spring_3.Controller.saveFile(Controller.java:98)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>java.sql.SQLRecoverableException: Закрытое соединение
文件hibernate.cfg.xml:
Что-то делаю не правильно, а вот что именно не могу понять.
Прошу подсказать или объяснить, как мне получить список объектов и сохранять объекты file в базу данных.



Чтобы исправить
NullPointerExceptionв методеFile.toString()нужно переписать методПотом вы перепутали сериализацию с десериализацией, нужно писать что-то типа
но
storageу вас неверно задан, т.е. вы можете использоватьПотом у вас проблема с соединениями, что соединения не закрываются как следует, и с каждым запросом создается новое количество соединений. Некоторые соединения продолжают использоваться после того как они были закрыты. Для того, чтобы исправить эту ошибку нужно закрывать фактор сессий (если вы его постоянно создаете, правда непонятно зачем, но это уже ваше дело). Например можно использовать
Внешний ключ для
storageкак самостоятельная сущность вFileне нужен; в коде эта связь выражается черезJoinColumn("STORAGE_ID_F"):Поле в БД добавится на основе данной конфигурации. Соответственно, в
PUTнеобходимо вFileдобавлять экземплярStorageчерезsetStorage(), а не его идентификатор черезsetStorageId().