RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 882680
Accepted
YuriiS
YuriiS
Asked:2020-09-18 20:33:49 +0000 UTC2020-09-18 20:33:49 +0000 UTC 2020-09-18 20:33:49 +0000 UTC

从数据库获取数据并在Oracle数据库中保存对象的问题

  • 772

我需要通过查询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:

hibernate.cfg.xml

<code>Postman</code>

Что-то делаю не правильно, а вот что именно не могу понять. Прошу подсказать или объяснить, как мне получить список объектов и сохранять объекты file в базу данных.

java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Roman C
    2020-09-20T05:11:56Z2020-09-20T05:11:56Z

    Чтобы исправить NullPointerException в методе File.toString() нужно переписать метод

    @Override
    public String toString() {
        return "File{" +
                "id=" + id +
                " name='" + name + '\'' +
                ", format='" + format + '\'' +
                ", size=" + size +
                ", storage=" + (storage != null?storage.getId():"null") +
                "}";
    }  
    

    Потом вы перепутали сериализацию с десериализацией, нужно писать что-то типа

    ObjectMapper objectMapper = new ObjectMapper();
    
    String input = stringBuilder.toString();
    
    File file = objectMapper.readValue(input, File.class);
    

    но storage у вас неверно задан, т.е. вы можете использовать

    String input in (mapping) - "{\t\"name\":\"File02\",\t\"format\":\"doc\",\t\"size\":\"200\",\t\"storage\":{\"id\":\"3\"}}"
    

    Потом у вас проблема с соединениями, что соединения не закрываются как следует, и с каждым запросом создается новое количество соединений. Некоторые соединения продолжают использоваться после того как они были закрыты. Для того, чтобы исправить эту ошибку нужно закрывать фактор сессий (если вы его постоянно создаете, правда непонятно зачем, но это уже ваше дело). Например можно использовать

    try(SessionFactory factory = createSessionFactory();Session session = factory.openSession()) {
    
    • 1
  2. tequillaz
    2020-09-18T21:15:49Z2020-09-18T21:15:49Z

    Но это поле мне надо для того, чтобы сохраняемому в базу объекту file просетить id хранилища storage в котором находится этот файл

    Внешний ключ для storage как самостоятельная сущность в File не нужен; в коде эта связь выражается через JoinColumn("STORAGE_ID_F"):

    @JsonIgnore
    @ManyToOne(targetEntity = Storage.class, fetch = FetchType.LAZY)
    @JoinColumn(name = "STORAGE_ID_F")
    public Storage getStorage() {
        return storage;
    }
    

    Поле в БД добавится на основе данной конфигурации. Соответственно, в PUT необходимо в File добавлять экземпляр Storage через setStorage(), а не его идентификатор через setStorageId().

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5