我试图使用WHERE子句中的ID从我的数据库中检索USER.但是我收到一个错误,我的程序失败了.
这是我运行程序时收到的错误:
ERROR [org.jboss.as.ejb3.invocation] (default task-19)
JBAS014134: EJB Invocation failed on component CustomerServiceBeanImpl
for method public abstract package.name.entity.ICustomer
package.name.bean.CustomerServiceBean.getCustomerById(long):
javax.ejb.EJBException: java.lang.IllegalArgumentException:
Parameter value [19533] did not match expected type [package.name.entity.User (n/a)]
Run Code Online (Sandbox Code Playgroud)
注意:[19533]是我使用的测试值.
这是CustomerServiceBeanImpl.java中出现错误的方法:
@Override
public Customer getCustomerById (final long id)
{
return Customer.getById (this.em, id);
}
Run Code Online (Sandbox Code Playgroud)
这是组件CustomerServiceBeanImpl调用的方法:
public static Customer getById (final EntityManager em, final long id)
{
for (final Customer c : em.createNamedQuery ("Customer.getById", Customer.class)
.setParameter ("id", id).setMaxResults (1).getResultList ())
{
return c;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
名称查询是这样的:
@NamedQuery (name = "Customer.getById",
query = "SELECT o FROM gnf.Customer o WHERE o.user = :id")
Run Code Online (Sandbox Code Playgroud)
在Customer.java类本身中,相关列是这样的:
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "user_id")
private User user;
Run Code Online (Sandbox Code Playgroud)
快速检查我的ERD我的"customer"表中的"id"列的数据类型为BIGINT.但是我不确定这是否重要.(顺便说一下PostgreSQL数据库.)
我该如何解决这个错误?
小智 8
您的命名查询中的WHERE子句似乎是个问题.Customer.class中的属性用户是User类型,您的查询期望它是与long兼容的类型.
...参数值[19533]与预期类型[package.name.entity.User ...不匹配
因此,如果您需要更多帮助,那么很高兴看到完整的实体用户和客户.
| 归档时间: |
|
| 查看次数: |
13651 次 |
| 最近记录: |