没有 属性 找到 Spring Boot JPA

No property found SpringBoot JPA

我在 运行 应用程序时遇到了这个错误,我不明白为什么..我在网上找到了信息,但不明白哪里出了问题。感谢您的帮助。

2 ) 关于这个的另一个问题,我应该说:

List<HistoriqueDeploiement> findByIdNamespaceAndIdService(Namespace id_namespace, Service id_service);
Or
List<HistoriqueDeploiement> findByIdNamespaceAndIdService(Integer id_namespace, Integer id_service);

错误:

Error creating bean with name 'checkConfigDeploiementRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.example.jpa.repository.CheckConfigDeploiementRepository.findByIdNamespaceAndIdService(com.example.jpa.model.Namespace,com.example.jpa.model.Service)! No property namespace found for type Integer! Traversed path: CheckConfigDeploiement.id.

实体:

@Entity
@Table(name = "historiquedeploiement")
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@AllArgsConstructor
public class HistoriqueDeploiement extends AuditModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id", nullable=false, unique=true)
    private Integer id;    

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

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

    @NotEmpty(message = "Le GitCommit ne peut être vide")
    @Size(max = 255)
    private String gitCommit;   
    
    @NotEmpty(message = "Le TagVersion ne peut être vide")
    @Size(max = 100)
    private String tagVersion;  
    
    @NotEmpty(message = "Le Actionby ne peut être vide")
    @Size(max = 255)
    private String actionBy;    
    
}

NamespaceEntity(与服务相同..)

@Entity
@Table(name = "namespace")
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@AllArgsConstructor
public class Namespace extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id", nullable=false, unique=true)
    private Integer id;

    @NotEmpty
    @Size(max = 100)
    @Column(unique = true)
    private String namespace;

    @OneToMany(mappedBy = "namespace", cascade = CascadeType.ALL, orphanRemoval = true)  
    private List<HistoriqueDeploiement> historiquedeploiements = new ArrayList<>();

    public void addHistoriqueDeploiement(HistoriqueDeploiement historiquedeploiement) {
        historiquedeploiements.add(historiquedeploiement);
        historiquedeploiement.setNamespace(this);
    }

    public void removeHistoriqueDeploiement(HistoriqueDeploiement historiquedeploiement) {
        historiquedeploiements.remove(historiquedeploiement);
        historiquedeploiement.setNamespace(null);
    }
}

回购,我不明白我做错了什么:

...
@Repository
public interface HistoriqueDeploiementRepository extends JpaRepository<HistoriqueDeploiement, Integer> {        
    List<HistoriqueDeploiement> findAll();
    
    List<HistoriqueDeploiement> findByIdNamespace(Integer id);
    
    List<HistoriqueDeploiement> findByIdNamespaceAndIdService(Namespace id_namespace, Service id_service);
    
    List<HistoriqueDeploiement> findByIdNamespaceAndLogCreatedAtBetween(Namespace id_namespace, Date datedebut, Date datefin);

    List<HistoriqueDeploiement> findByIdNamespaceAndLogCreatedAt(Namespace id_namespace, Date date);

}

好的,我查看了您的问题,这就是我的发现。您分配给存储库接口方法参数的类型错误。

您正在寻求获取 HistoriqueDeploiement 实体的列表,这些实体的名称空间和服务实体具有特定 ID。请注意,Namespace 和 Service 实体的 ID 是 Integer 类型。所以为了解决你可以简单地重写你的方法如下:

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

    List<HistoriqueDeploiement> findByNamespaceId(Integer id);

    List<HistoriqueDeploiement> findByNamespaceIdAndServiceId(Integer id_namespace, Integer id_service);

    List<HistoriqueDeploiement> findByNamespaceIdAndLogCreatedAtBetween(Integer id_namespace, Date datedebut, Date datefin);

    List<HistoriqueDeploiement> findByNamespaceIdAndLogCreatedAt(Integer id_namespace, Date date);
}

请注意,这里的主要变化是我们用 Integer 类型替换了 Namespace 和 Service 类型,这是它们 ID 的实际类型