java.lang.IllegalArgumentException:您为此查找操作提供了错误PK类的实例。

时间:2016-01-25 10:13:31

标签: jpa primary-key illegalargumentexception

我正在尝试创建一个URI并返回一个寻找NIF的对象。 (一个自定义过滤器) 我试图通过id复制搜索但是不起作用,事实上,我不确定我做了什么。我有两个具有这些功能的课程

ClientesAbstractFacade.java

    public T findNif(Object nif) {
        return getEntityManager().find(entityClass, nif);
    }

lientesFacadeREST.java

    @GET
    @Path("nif/{nif}")
    @Produces({MediaType.APPLICATION_JSON})
    public Clientes findNif(@PathParam("nif") String nif) {
        return super.findNif(nif);
    }

这里是POJO

@Entity
@Table(name = "clientes")
public class Clientes implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;

正如您所看到的,我正在尝试进行自定义搜索,这很简单,然后实现登录。 但我甚至无法通过nif过滤,这些返回错误500

  

java.lang.IllegalArgumentException:您为此查找操作提供了错误PK类的实例。期望的类:类java.lang.Integer,接收的类:class java.lang.String。

1 个答案:

答案 0 :(得分:1)

例外说明了一切:

  

IllegalArgumentException:您为此查找操作提供了错误PK类的实例。期望的类:类java.lang.Integer,接收的类:类java.lang.String

getEntityManager().find(entityClass, nif)正在处理表格的主键列。作为例外情况,这是一个整数。 我想你想使用你的NamedQueries,因此使用EntityManager - public T findNif(String nif) { return (T) getEntityManager().createNamedQuery("Clientes.findByNif", Clientes.class) .setParameter("nif", nif).getSingleResult(); } 的方法。

所以你的find-method看起来应该是这样的:

box-shadow