当前位置: 首页 > 知识库问答 >
问题:

jpql查询结构,值1与预期类型不匹配

王渊
2023-03-14

你好,我有两个标签

1.人员表

2.电话号码表

我正试图实现这样的质疑

SELECT * FROM jobs.phonenumber where Person_ID='1';

但是在jpql中。

我试着做一些类似于:

String query="SELECT p1 FROM PhoneNumber p1 WHERE p1.person=:id;

下面是我的实体类的示例:

@Entity
public class PhoneNumber {
    @Id
    @GeneratedValue
    @Column(name = "phoneId")
    private long id;
    @Column(name = "phoneNumber")
    private int number;
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "Person_ID")
    private Person person;


@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "personId")
    private long id;
    @Column(name = "personName")
    private String name;
    @Column(name = "personAge")
    private int age;
    @OneToMany(mappedBy = "person")
    private List<PhoneNumber> phones;

我有一个错误:参数值1与预期类型[model.Person(n/a)]不匹配

下面是我的方法:

@Path("{id}/phones")
@GET
@Produces(MediaType.TEXT_PLAIN)
public List<PhoneNumber> getPhoneNumbers(@PathParam(value = "id") long id) {
    List<PhoneNumber> resultList = new ArrayList<>();
    EntityManager createEntityManager = emf.createEntityManager();
    String query="select p1 from PhoneNumber p1 where p1.person=:id";
    TypedQuery<PhoneNumber> createNamedQuery = createEntityManager.createQuery(query, PhoneNumber.class);
    createNamedQuery.setParameter("id", id);
    try {
        resultList = createNamedQuery.getResultList();
    } catch (Exception e) {
        System.out.println("Could not retrive phone list");
    }
    return resultList;
}

谁能帮我一下,我做错了什么?

共有1个答案

凌嘉勋
2023-03-14

您需要使用person.id来查询:

String query="select p1 from PhoneNumber p1 where p1.person.id=:id";

或者先检索这个人,然后将其用作参数:

Person person = createEntityManager.find(Person.class, id);

String query="select p1 from PhoneNumber p1 where p1.person=:id";
TypedQuery<PhoneNumber> createNamedQuery = createEntityManager.createQuery(query, PhoneNumber.class);
createNamedQuery.setParameter("id", person);
 类似资料:
  • 我做错了什么? 正在更新: 我发现了问题所在。问题与ActionRepository中找到的函数有关。函数的签名首先要求两个日期进行比较,然后id和我给出了相反的值。我很清楚,在我上了它之后,我会有一个问题的日期,所以答案确实帮助了我。谢谢大家!

  • 我得到的错误. 我对此感到困惑,因为它来自下面显示的被注释掉的服务方法。当我把它注释掉时,错误就避免了。列是一个,即或。 实体: 我的存储库: 我的服务: 当我取消注释时

  • 我试图更新一个实体与OneToOne关系使用restful Web服务。 我使用自定义查询,但它不工作 错误: java.lang.的参数值[2]不匹配预期的类型[com.mezoo.tdc.model.ActivityType(n/a)] 活动豆 豆子 它是可能的更新没有自定义查询?我想使用下面的POST请求: {"uuid":"9d9fa946-ee6e-408e-9e8a-7a9786a1d

  • 我有实体和rest控制器,当我向控制器发出请求时,它会引发以下异常: java.lang.:参数值[1]不匹配预期类型[java.lang.整数(n/a)] 我的控制器: 我的实体具有int类型id:

  • 它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。

  • 我试图在QueryDSL4.1.4中运行带有子查询的查询。版本3.x中的等价物起作用了,但我似乎无法在版本4.1.4中使其起作用。不确定是我漏了什么还是有个bug。感谢任何输入! 下面是相关代码: 似乎整个子查询都被设置为参数,而Hibernate对此并不满意。是否应该使用不同的QueryDSL语法来避免此问题?