出于开发目的,我使用的是 Windows 环境(Eclipse / Jboss) 我有一个 userDAO,它提供了通过名字和姓氏检索 UserEntity 的方法。此查询在开发环境中运行良好。但是在 Unix 环境中,我得到一个javax.persistence.NoResultException: No entity found for query
异常。
详细情况:正在调用一个 REST 服务,其中包含许多数据以及名字和姓氏。需要使用此参数来获取实际的 userEntity。(对于 Unix 上的任何用户,它都失败了。)
所以,其余的服务正在这样做:
@Consumes("application/json")
@Produces("application/json")
public String create(String plaindata) {
JSONObject 数据 = 新 JSONObject(plaindata);
String ownerFirstname = data.getString("userFirstname"); //Yes userX, not ownerX
String ownerLastname = data.getString("userLastname");
UserEntity owner = null;
try {
owner = userDataService.getUserDetailsByName(ownerFirstname, ownerLastname);
} catch (Exception e) {
throw new Exception("Found zero possible users for the given name '" + ownerFirstname + " " + ownerLastname
+ "'. Cannot invoke process.", e);
}
...
}
userDataService 看起来(剥离)如下:
private static String GET_USER_BY_FIRSTNAME_LASTNAME_QUERY = "SELECT * FROM " + DBConstants.USER_TABLE_NAME
+ " user WHERE user.FIRST_NAME = :firstnameValue AND user.LAST_NAME = :lastnameValue";
public UserEntity getUserDetailsByName(String firstname, String lastname) {
Query query = em.createNativeQuery(GET_USER_BY_FIRSTNAME_LASTNAME_QUERY, UserEntity.class);
query.setParameter("firstnameValue", firstname);
query.setParameter("lastnameValue", lastname);
UserEntity u = (UserEntity) query.getSingleResult();
return u;
}
DBConstants 包含表名,如:
public static final String DATATABLE_PREFIX = "pre_";
public static final String USER_TABLE_NAME = DATATABLE_PREFIX+"user_entity";
mySQL 中的列名是大写的,所以一切看起来都是正确的。
这适用于 Windows 环境,但不适用于 Unix 环境:(