Spring Boot SQLRecoverableException:当使用2个Map表时,没有更多的数据可从套接字读取

oxcyiej7  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(208)

我正在使用Spring Data JPA从数据库中检索数据。
我有以下两个表:**部门和班级。**部门和班级之间存在一对多关系。

  1. Department columns: Dept_Id, Dept_Name, CreatedDate
  2. Class columns: Class_Id, Dept_Id, Class_Type, Class_Name

字符串
我正在尝试根据班级类型和班级名称获取部门列表。
我创建了如下实体:

  1. @Table(name = "Department")
  2. @Entity
  3. @Builder
  4. @Getter
  5. @Setter
  6. @NoArgsConstructor
  7. @AllArgsConstructor
  8. @JsonInclude(JsonInclude.Include.NON_NULL)
  9. public class Department {
  10. @Id
  11. @GeneratedValue(strategy = GenerationType.IDENTITY)
  12. @Column(name = "Dept_Id", nullable = false)
  13. private Long DeptId;
  14. @Column(name = "Dept_Name", nullable = false, length = 256, unique = true)
  15. private String DeptName;
  16. @Column(name = "CreatedDate", length = 256)
  17. private String CreatedDate;
  18. @OneToMany(mappedBy = "Department", fetch = FetchType.EAGER)
  19. @ToString.Exclude
  20. private Set<Class> classess;
  21. }
  22. @Table(name = "Class")
  23. @Entity
  24. @Builder
  25. @Getter
  26. @Setter
  27. @NoArgsConstructor
  28. @AllArgsConstructor
  29. @JsonInclude(JsonInclude.Include.NON_NULL)
  30. public class Class {
  31. @Id
  32. @GeneratedValue(strategy = GenerationType.IDENTITY)
  33. @Column(name = "Class_Id", nullable = false)
  34. private Long id;
  35. @ManyToOne(optional = false)
  36. @JoinColumn(name = "Dept_Id", nullable = false)
  37. @ToString.Exclude
  38. @JsonIgnore
  39. private Department department;
  40. @Column(name = "Class_Type", length = 256)
  41. private String classType;
  42. @Column(name = "Class_Name", length = 256)
  43. private String className;
  44. }


部门资料库

  1. @Repository
  2. public interface DepartmentRepository extends JpaRepository<Department, Long> {
  3. @Query(nativeQuery = true,
  4. value="SELECT dept.* " +
  5. "FROM Department dept INNER JOIN Class cls ON dept.DeptId = cls.DeptId " +
  6. "WHERE cls.classType = 'class1' " +
  7. "AND cls.className IN :name " +
  8. "ORDER BY START_TIME DESC")
  9. List<Department> findDepartmentByClassType(@Param("name") List<String> name);
  10. }


ClassRepository

  1. @Repository
  2. public interface ClassRepository extends JpaRepository<Class, Long> {
  3. }


售后服务:

  1. @Service
  2. public class DepartmentService {
  3. public List<Department> getDepartmentsForClassType(List<String> className) {
  4. departmentRepository.findDepartmentByClassType(className);
  5. }


当我运行应用程序时,我得到以下错误:

  1. java.sql.SQLRecoverableException: No more data to read from socket
  2. at oracle.jdbc.driver.T4CMAREngineNIO.prepareForUnmarshall(T4CMAREngineNIO.java:784) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  3. at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:429) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  4. at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:407) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  5. at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  6. at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:501) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  7. at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:1292) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  8. at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:1025) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  9. at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  10. at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  11. at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  12. at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  13. at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
  14. at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na]
  15. at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
  16. at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
  17. at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
  18. at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
  19. at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na]
  20. at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
  21. j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]


我相信这个错误是由于我Map两个实体的方式中的代码问题造成的。我这么说的原因是因为如果我更新仓库的select语句,只从department表获取记录,而不与class表连接,那么应用程序就可以成功运行。有人能帮助我弄清楚我在这里做错了什么吗?

rkue9o1l

rkue9o1l1#

如果连接到类表导致问题,请检查以下内容:
1.确保类表中存在匹配的记录。
1.验证连接条件的准确性。
1.检查类表的访问权限。
1.检查实体字段和表列之间的Map。

emeijp43

emeijp432#

我能够解决这个问题。我必须在Department实体中添加@OneToMany关系,如下所示

  1. @OneToMany
  2. @JoinColumn(name= "Dept_Id")
  3. private List<Class> classList = new ArrayList<>();

字符串
另外,将@Transactional("transactionManager")添加到服务中。

相关问题