我正在尝试使用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数据库。)
如何解决此错误?
答案 0 :(得分:8)
您的命名查询中的WHERE子句似乎是个问题。 Customer.class中的属性用户属于User类型,您的查询期望它是与long兼容的类型。
... 参数值[19533]与预期类型[package.name.entity.User ...
不匹配因此,如果您需要更多帮助,那么很高兴看到完整的实体用户和客户。
答案 1 :(得分:2)
这种情况正在发生,因为在您的数据库中,参数将是@oneToOne对象,您必须在Object中调用id,因此您必须按如下方式提供查询:
"从用户用户中选择用户,其中user.customer.id =:param"