我已经为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);
}
你为什么不看一下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客户端调用后,我想进行一些验证或业务登录,然后插入到数据库,我该怎么做?这意味着我想调用一个服务方法来完成所有的业务
问题内容: 关于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
我使用Spring Boot和Spring数据。 我认为把存储库层和服务层分开是没有问题的 null null 在我的控制器中,我必须从UserService调用方法,有时还必须从UserRepository调用方法。目前,我将两者都注入到控制器中,并调用service或repository 我只是问,因为我混淆了在同一个类中注入两者和调用其中一个或另一个 另一方面,这意味着在服务层重复方法,如下