【问题标题】:JPA createQuery where condition does not workJPA createQuery 条件不起作用
【发布时间】:2021-10-27 12:20:44
【问题描述】:

我正在尝试使用 JPA 从数据库中获取记录。但是我可以在数据库中插入记录,甚至可以使用 EntityManager 类的 createQuery 方法获取所有记录。

但在以下情况下,我不明白为什么 where 子句中的条件不起作用。

请帮我弄清楚。

POJO 类:

@Entity
@Table(name = "frameworks_filter")
public class FilteredFrameworksDbStructure {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @Column(name = "regular_name")
    private String regularName;
    
    @Column(name = "component_name")
    private String componentName;
    
    @Column(name = "component_owner")
    private String componentOwner;
    
    @Column(name = "frameworks")
    private String frameworks;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRegularName() {
        return regularName;
    }
    public void setRegularName(String regularName) {
        this.regularName = regularName;
    }
    public String getComponentName() {
        return componentName;
    }
    public void setComponentName(String componentName) {
        this.componentName = componentName;
    }
    public String getComponentOwner() {
        return componentOwner;
    }
    public void setComponentOwner(String componentOwner) {
        this.componentOwner = componentOwner;
    }
    public String getFrameworks() {
        return frameworks;
    }
    public void setFrameworks(String frameworks) {
        this.frameworks = frameworks;
    }
}

DAO 类方法:

public List<FilteredFrameworksDbStructure> getFilteredFrameworks(String regularName) {

        EntityManager entityManager = entityManagerFactory.createEntityManager();
        
        List<FilteredFrameworksDbStructure> filteredFrameworksDbStructureList = entityManager
                .createQuery("from FilteredFrameworksDbStructure F where F.regularName = :regular", FilteredFrameworksDbStructure.class)
                .setParameter("regular", regularName)
                .getResultList();
        

        return filteredFrameworksDbStructureList;
    }

问题:where 子句中的条件不起作用。它只是获取所有记录,而与提供的常规名称无关。

问候, 帕拉格·温丘卡

【问题讨论】:

    标签: java spring hibernate jpa hql


    【解决方案1】:

    为什么不使用JpaRepositoryCrudRepository 来获取结果?查看本教程 herehere 了解如何使用它们。

    您可以使用 where 子句。请参阅下面的示例存储库,您可以使用它来获得与 entityManager 相同的结果

    public interface FilteredFrameworksDbStructureRepo extends JpaRepository<FilteredFrameworksDbStructure , Integer>{
    
        List<FilteredFrameworksDbStructure> findAllByRegularName(String regularName)
    }
    

    请注意,您必须将 id 成员变量从 int 更改为 Integer

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多