開発目的で、私は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 data = new 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 環境では機能しません :(