当前位置: 首页 > 知识库问答 >
问题:

如何在spring中使用JPA存储库从服务器检索blob

谭泉
2023-03-14

我已经为CRUD创建了spring应用程序。我可以很容易地写入服务器数据,如字符串,长,blob,但当我试图从服务器检索它。我遇到了服务器的字节数组在服务器的BigInteger中给出的困难。我怎样才能在字节数组中获得数据而不是BigInteger?当我在插入字节数组中写入该数据时,该数据的列是BLOB。这是我的代码

储存库

public interface ArriveRepository extends JpaRepository<ArriveEntity,Long>
{ 
    @Query(value = "select arrive.time,air_lines.image,arrive.flight,arrive.destination_uzb," +
            "arrive.destination_eng,arrive.destination_rus,arrive.status,arrive.status_time " +
            "from arrive inner join air_lines on air_lines.id = arrive.airline_id where arrive.arrive_date = (:date1)",nativeQuery = true)
    List<Object[]> getForArriveTerminal(@Param("date1") LocalDate date1);
}
public class ArriveTerminalDto {
   private String time;
   private BigInteger logo;
   private String flight;
   private String destinationUzb;
   private String destinationEng;
   private String destinationRus;
   private String status;
   private String statusTime;
  //getter setter}
  public List<ArriveTerminalDto> getToShow(LocalDate date1)
    {
        List<ArriveTerminalDto> list = new ArrayList<>();
        List<Object[]> list1 = arriveRepository.getForArriveTerminal(date1);
        for(Object[] objects: list1)
        {
            ArriveTerminalDto arriveTerminalDto = new ArriveTerminalDto();
            arriveTerminalDto.setTime((String)objects[0]);
            arriveTerminalDto.setLogo((BigInteger) objects[1]);
            arriveTerminalDto.setFlight((String) objects[2]);
            arriveTerminalDto.setDestinationUzb((String) objects[3]);
            arriveTerminalDto.setDestinationRus((String) objects[4]);
            arriveTerminalDto.setDestinationEng((String) objects[5]);
            arriveTerminalDto.setStatus((String) objects[6]);
            list.add(arriveTerminalDto);
        }
        return list;
    }
{
    "timestamp": "2019-01-28T09:33:52.038+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "java.math.BigInteger cannot be cast to [B",
    "path": "/arrive/terminal/date=2019-01-27"
}
public interface ArriveRepository extends JpaRepository<ArriveEntity,Long>
{

    @Query(value = "select arrive.time,air_lines.image,arrive.flight,arrive.destination_uzb," +
            "arrive.destination_eng,arrive.destination_rus,arrive.status,arrive.status_time " +
            "from arrive inner join air_lines on air_lines.id = arrive.airline_id where arrive.arrive_date = (:date1)",nativeQuery = true)
    List<ArriveTerminalDto> getForArriveTerminal(@Param("date1") LocalDate date1);
}

共有1个答案

时同
2023-03-14

你为什么不看一下Spring内容社区项目。该项目允许您将内容与Spring数据实体相关联。想想Spring数据,但对于内容,或者非结构化数据。这也可以为内容提供RESTendpoint,比如Spring Data REST。

这种方法将为您的内容提供一个清晰的抽象,并为许多不同类型的存储提供实现。它是基于流的,而不是基于字节的。如果要传输非常大的文件,使用Byte[]是行不通的。另外,使数据库正确地流化是非常特殊的。当Spring Content已经完成时,您可能不想自己解决所有这些问题。

这很容易添加到现有的项目中。我不确定你是否在使用Spring Boot。我将举一个非Spring Boot示例:

pom.xml

   <!-- Java API -->
   <dependency>
      <groupId>com.github.paulcwarren</groupId>
      <artifactId>spring-content-jpa</artifactId>
      <version>0.5.0</version>
   </dependency>
   <!-- REST API (if you want it) -->
   <dependency>
      <groupId>com.github.paulcwarren</groupId>
      <artifactId>spring-content-rest</artifactId>
      <version>0.5.0</version>
   </dependency>

配置

@Configuration
@EnableJpaStores
@Import("org.springframework.content.rest.config.RestConfiguration.class")
public class ContentConfig {

    // schema management
    // 
    @Value("/org/springframework/content/jpa/schema-drop-mysql.sql")
    private Resource dropContentTables;

    @Value("/org/springframework/content/jpa/schema-mysql.sql")
    private Resource createContentTables;

    @Bean
    DataSourceInitializer datasourceInitializer() {
        ResourceDatabasePopulator databasePopulator =
                new ResourceDatabasePopulator();

        databasePopulator.addScript(dropContentTables);
        databasePopulator.addScript(createContentTables);
        databasePopulator.setIgnoreFailedDrops(true);

        DataSourceInitializer initializer = new DataSourceInitializer();
        initializer.setDataSource(dataSource());
        initializer.setDatabasePopulator(databasePopulator);

        return initializer;
    }
}
@Entity
public class ArriveEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    .. existing fields...    


    @ContentId
    private String contentId;

    @ContentLength
    private long contentLength = 0L;

    // if you have rest endpoints
    @MimeType
    private String mimeType = "text/plain";
}
@StoreRestResource(path="arriveEntityContent)
public interface ArrivEntityContentStore extends ContentStore<ArriveEntity, String> {
}

要使用Java API访问内容,请自动连接ArriventyContentStore并使用它的方法。

或者使用REST API访问内容:

curl-x POST/arriveentitycontent/{arriveEntityId}

HTH

 类似资料:
  • 问题内容: 我无法为spring数据jpa存储库提供建议。目的是在特定存储库中使用自定义注释(在此示例中为ResourceNotFound)进行注释的(非常规)所有非公共方法,并在返回值为或者为空集合时引发异常。 以下建议是将用注释的接口实现的所有公共方法进行连接。 该方法的工作原理,当切入点isspecified为: 但是,未拾取注释。这可能是由于存储库接口的基础类是一个(代理的)不具有特定注释

  • 我为spring数据jpa存储库提供建议的努力失败了。目标是(围绕)使用自定义注释(本例中的ResourceNotFound)注释的特定存储库中的所有非void公共方法,并在返回值为null或空集合时引发异常。 下面的建议是连接使用 方法有效: 但是,未提取ResourceNotFound注释。这可能是因为存储库接口的底层类是一个(代理的)SimpleJPrepository,它没有特定的注释。

  • 作为Springboot的新手,我看到了一个例子,我们创建存储库来对给定的Object执行各种操作。这是样品一 所以从其他客户那里,如果我派人杰森 http://localhost:8080/people{....} 它插入到数据库中,在内部调用 save 方法。 在这里,从REST客户端调用后,我想进行一些验证或业务登录,然后插入到数据库,我该怎么做?这意味着我想调用一个服务方法来完成所有的业务

  • 我正在用Symfony制作简单的应用程序。我在这里配置了服务 我的服务使用存储库(例如,评论服务使用评论存储库),这里是的构造函数 性质 构造函数: 当我试图运行我的应用程序我得到这个错误 PHP致命错误:未捕获Symfony\Component\DependencyInjection\Exception\AutowiringFailedException:无法自动连线服务“AppBundle\R

  • 问题内容: 关于Spring JPA存储库事务性的1个快速问题。我有未标记为事务性的服务,并调用了Spring JPA存储库方法 它被定义为 问题是它失败,并且“ 没有EntityManager,当前线程没有可用的实际事务- 无法可靠地处理’remove’调用;嵌套异常是javax.persistence.TransactionRequiredException “异常。 好的,我可以通过将服务

  • 关于Spring JPA存储库事务性的1个快速问题。我有一个未标记为事务性的服务,并调用Spring JPA存储库方法 好的,我可以通过标记服务或deleteByEmail(..)来解决它方法作为事务性的,但我就是不明白为什么它现在会崩溃。Spring文档明确指出“存储库实例上的CRUD方法在默认情况下是事务性的。”(http://docs.spring.io/spring-data/jpa/do