首页 > 解决方案 > 使用占位符 jpa 命名查询将列名作为参数传递,返回不正确的数据

问题描述

我从下面的代码中获取列表中的列名而不是列值

例如

should get [12.4,54.6,65.7,88.7,44.8]

but getting [onsite,onsite,onsite,onsite,onsite]

道:

public List<String> getLocation(String location,String roles, String title,String tier,Integer level) {
        
        List<String> result = new ArrayList<>();
        try {
                                
              Query query = entityManager.createNamedQuery("getLocation");
              query.setParameter("location", location);//location value onsite
              query.setParameter("title",title); 
              query.setParameter("roles",roles);
              query.setParameter("tier", tier);
              query.setParameter("level", level);
              result = query.getResultList(); 
        }
        catch(Exception e) {
            logger.error(e.getMessage());
        }
         return result;
    }

实体类:

@Entity

@NamedNativeQueries({
    
    @NamedNativeQuery(name = "getLocation", 
    query = "select :location FROM myschema.test  where title=:title and roles=:roles and level=:level and tier=:tier"
      )
    
    })
@Table(name = "test", schema = "mySchema")
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    
    
    @Column(name = "name")
    private String name;

    @Column(name = "title")
    private String title;

    @Column(name = "roles")
    private String roles;

    @Column(name = "level")
    private Integer level;
    
    @Column(name = "tier")
    private String tier;
    
    @Column(name = "diversity")
    private String diversity;
    
    @Column(name = "onsite")
    private Double onsite;

    @Column(name = "offsite")
    private Double offsite;
}

服务代码:

List dbLocations = supplierDao.getLocation("onsite", "job role","job title","tier1","8");

jpa 命名查询返回列名列表而不是值

标签: javaspringspring-bootspring-data-jpa

解决方案


无论何时何地,无论何时使用它们,都给它们起相同的名称。如果您使用 html 文件来检索这些数据,那么也可以。名称歧义可能是导致此问题的原因。


推荐阅读