Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot查询DTO_Java_Sql_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java SpringBoot查询DTO

Java SpringBoot查询DTO,java,sql,spring-boot,jpa,spring-data-jpa,Java,Sql,Spring Boot,Jpa,Spring Data Jpa,由于我的DTO类,我希望检索数据库中包含的信息。 问题是,如果我不理解为什么 数据库中的实体 @Entity @Table(name = "historiquedeploiement") @Data @NoArgsConstructor @AllArgsConstructor public class HistoriqueDeploiement { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)

由于我的DTO类,我希望检索数据库中包含的信息。 问题是,如果我不理解为什么

数据库中的实体

@Entity
@Table(name = "historiquedeploiement")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HistoriqueDeploiement {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;    

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "idnamespace", nullable = false)    
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    @JsonIdentityReference(alwaysAsId=true)
    @JsonProperty("idnamespace")
    private Namespace namespace;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "idservice", nullable = false)    
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    @JsonIdentityReference(alwaysAsId=true)
    @JsonProperty("idservice")
    private Service service;

    @NotEmpty
    @Size(max = 100)
    private String tagvalue;
}
DTO:

我的问题是:

@Repository
public interface HistoriqueDeploiementRepository extends JpaRepository<HistoriqueDeploiement, Integer> {        
    List<HistoriqueDeploiement> findAll();

// Problem Here 
Error creating bean with name 'historiqueDeploiementRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.example.jpa.repository.HistoriqueDeploiementRepository.findAllDeploiement()!


    @Query("SELECT new com.example.jpa.dto.HistoriqueDeploiementReadingDTO(historiquedeploiement.id, namespace.namespacename, service.servicename, historiquedeploiement.tagvalue) FROM historiquedeploiement, namespace, service WHERE namespace.id = historiquedeploiement.idnamespace and service.id = historiquedeploiement.idservice")

    List<HistoriqueDeploiementReadingDTO> findAllDeploiement();
}
@存储库
公共接口HistoryQueeDevelopmentRepository扩展了JpaRepository{
列出findAll();
//这里有问题
创建名为“HistoryQuedeLoiementRepository”的bean时出错:FactoryBean在创建对象时引发异常;嵌套异常为java.lang.IllegalArgumentException:方法公共抽象java.util.List com.example.jpa.repository.HistoryQuedeLoiementRepository.findAllDeploiement()的查询验证失败!
@查询(“从HistoryQueeDeployment、命名空间、服务中选择new com.example.jpa.dto.HistoryQueeDeploymentTreadingDTO(HistoryQueeDeployment.id、namespacename、service.servicename、HistoryQueeDeployment.tagvalue),其中namespace.id=HistoryDeployment.idnamespace和service.id=HistoryQueeDeployment.idservice”)
列出FindAllDeployment();
}
我的目标是让此查询正常工作:)

如果你认为你有比解决这个问题更好的主意,请告诉我!
谢谢

您的HistoryQueeDevelopment实体缺少@entity:

@Entity
public class HistoriqueDeploiement {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;    

... the rest of the class
}
没有该标记,Spring boot ORM不知道该类代表一个实体,也不能对其执行查询

您可以在文档中找到关于@Entity标记的说明:

Customer类用@Entity注释,表示它是一个JPA实体。(由于不存在@Table注释,因此假定此实体映射到名为Customer的表。)


我这边的解决方案就是这个

package com.example.jpa.services.historiquedeploiement;

import java.util.List;
import java.util.stream.Collectors;

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

import com.example.jpa.repository.HistoriqueDeploiementRepository;
import com.example.jpa.dto.HistoriqueDeploiementReadingDTO;
import com.example.jpa.model.HistoriqueDeploiement;
@Service
@Configuration
public class MapService {

    @Autowired
    private HistoriqueDeploiementRepository historiqueDeploiementRepository;
    
    @Autowired
    private ModelMapper modelMapper;
    
    @Bean
    public ModelMapper modelMapper() {
       ModelMapper modelMapper = new ModelMapper();
       return modelMapper;
    }
    
    public List<HistoriqueDeploiementReadingDTO> getAllHistorique() {
       return ((List<HistoriqueDeploiement>) historiqueDeploiementRepository
                .findAll())
                .stream()
                .map(this::convertToHistoriqueDeploiementReadingDTO)
                .collect(Collectors.toList());
    }

    private HistoriqueDeploiementReadingDTO convertToHistoriqueDeploiementReadingDTO(HistoriqueDeploiement historiqueDeploiement) { 
        modelMapper.getConfiguration()
                .setMatchingStrategy(MatchingStrategies.LOOSE);
        HistoriqueDeploiementReadingDTO historiqueDeploiementReadingDTO = modelMapper
                .map(historiqueDeploiement, HistoriqueDeploiementReadingDTO.class); 
        return historiqueDeploiementReadingDTO;
    }
}
package com.example.jpa.services.historyquedeployment;
导入java.util.List;
导入java.util.stream.collector;
导入org.modelmapper.modelmapper;
导入org.modelmapper.convention.MatchingStrategies;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.stereotype.Service;
导入com.example.jpa.repository.HistoryQuedeLoiementRepository;
导入com.example.jpa.dto.historyquedeployeementradingdto;
导入com.example.jpa.model.HistoryQueeDevelopment;
@服务
@配置
公共类映射服务{
@自动连线
私人的历史发展历史的发展;
@自动连线
私有模型映射器模型映射器;
@豆子
公共模型映射器模型映射器(){
ModelMapper ModelMapper=新的ModelMapper();
返回模型映射器;
}
公共列表getAllHistoryque(){
返回((列表)历史查询开发存储
.findAll())
.stream()
.map(此::ConvertToHistoryQuedeLoviementTreadTo)
.collect(Collectors.toList());
}
私有历史开发到转换到历史开发到(历史开发到历史开发){
modelMapper.getConfiguration()
.设置匹配策略(匹配策略松动);
HistoryQuedeLoiementTreading数据到HistoryQuedeLoiementTreading数据到=模型映射器
.map(历史开发,历史开发到.class);
将历史开发记录返回到;
}
}

这是否回答了您的问题@RobertBain我想使用新的操作员。我认为当你提供错误信息时,人们可能会更好地帮助你。例如,迭戈·平托(Diego Pinto)发布了一个非常好的答案,它花了一些时间为您制作,如果您提供了错误,则可以保存该答案。该错误是在发布后提供的。在“我的查询区”://这里的问题我没有复制整个文件,它已经在那里了。我更新了我的帖子
package com.example.jpa.services.historiquedeploiement;

import java.util.List;
import java.util.stream.Collectors;

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

import com.example.jpa.repository.HistoriqueDeploiementRepository;
import com.example.jpa.dto.HistoriqueDeploiementReadingDTO;
import com.example.jpa.model.HistoriqueDeploiement;
@Service
@Configuration
public class MapService {

    @Autowired
    private HistoriqueDeploiementRepository historiqueDeploiementRepository;
    
    @Autowired
    private ModelMapper modelMapper;
    
    @Bean
    public ModelMapper modelMapper() {
       ModelMapper modelMapper = new ModelMapper();
       return modelMapper;
    }
    
    public List<HistoriqueDeploiementReadingDTO> getAllHistorique() {
       return ((List<HistoriqueDeploiement>) historiqueDeploiementRepository
                .findAll())
                .stream()
                .map(this::convertToHistoriqueDeploiementReadingDTO)
                .collect(Collectors.toList());
    }

    private HistoriqueDeploiementReadingDTO convertToHistoriqueDeploiementReadingDTO(HistoriqueDeploiement historiqueDeploiement) { 
        modelMapper.getConfiguration()
                .setMatchingStrategy(MatchingStrategies.LOOSE);
        HistoriqueDeploiementReadingDTO historiqueDeploiementReadingDTO = modelMapper
                .map(historiqueDeploiement, HistoriqueDeploiementReadingDTO.class); 
        return historiqueDeploiementReadingDTO;
    }
}