错误:参数值与预期类型不匹配

时间:2016-05-20 20:22:53

标签: jpa jpql

我正在尝试使用WHERE子句中的ID从我的数据库中检索USER。但是我收到错误,我的程序失败了。

这是我运行程序时收到的错误:

a,
h2,
h3 {
  font-family: 'Montserrat', sans-serif;
  margin: 0;
}

h1 {
  font-family: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif;
  font-size: 92px;
  text-transform: uppercase;
  text-rendering: optimizeLegibility;
}

a {
  color: #000;
}

.invert {
  color: #fff;
  background-color: #000;
}

.col-md-4 p {
  padding-top: 5px;
}

a:hover {
  color: #000;
  background-color: #fff;
  text-decoration: none;
}

.nav,
.navbar-nav {
  margin: 0;
  padding: 0;
}

body {
  margin: 0;
}

.page-header {
  border: none;
  padding-bottom: 40px;
}

footer {
  margin: 50px 0;
}

.row {
  padding-left: 0;
}

#photos {
  opacity: .88;
}

#photos img {
  width: 30%;
  float: left;
  display: block;
  margin: 1px;
}

ul {
  list-style: none;
  margin: 0px auto;
  padding: 10px;
  display: block;
  max-width: 100%;
  text-align: center;
}

#overlay {
  background: rgba(0, 0, 0, .8);
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  display: none;
  text-align: center;
}

#overlay img {
  margin: 10% auto 0;
  width: 550px;
  border-radius: 5px;
}

#photos {
  width: 100%;
  padding: 10px;
}

#photo-gallery {
  width: 100%;
}

注意:[19533]是我使用的测试值。

这是CustomerServiceBeanImpl.java中出现错误的方法:

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)]

这是组件CustomerServiceBeanImpl调用的方法:

@Override
public Customer getCustomerById (final long id)
{
    return Customer.getById (this.em, id);
}

名称查询是:

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;
}

在Customer.java类本身中,相关列是这一列:

@NamedQuery (name = "Customer.getById", 
query = "SELECT o FROM gnf.Customer o WHERE o.user = :id")

快速检查我的ERD我的“customer”表中的“id”列的数据类型为BIGINT。但是我不确定这是否重要。 (顺便说一下PostgreSQL数据库。)

如何解决此错误?

2 个答案:

答案 0 :(得分:8)

您的命名查询中的WHERE子句似乎是个问题。 Customer.class中的属性用户属于User类型,您的查询期望它是与long兼容的类型。

... 参数值[19533]与预期类型[package.name.entity.User ...

不匹配

因此,如果您需要更多帮助,那么很高兴看到完整的实体用户和客户。

答案 1 :(得分:2)

这种情况正在发生,因为在您的数据库中,参数将是@oneToOne对象,您必须在Object中调用id,因此您必须按如下方式提供查询:

"从用户用户中选择用户,其中user.customer.id =:param"