以下の簡単なコードがあります。
@PersistenceContext(name = "mycontext")
private EntityManager entityManager;
public void getAggregatePower() {
String sqlString = "SELECT SUM(power) FROM mytable";
Object singleResult = entityManager.createNativeQuery(sqlString).getSingleResult();
System.out.println(singleResult.getClass().getName());
}
これを実際の環境で実行すると、印刷指示が印刷されjava.math.BigDecimal
ます。しかし、これを単体テスト環境で実行すると、印刷指示が印刷されjava.lang.Double
ます。
どちらの場合も、WildFly 9 サーバーと Postgresql 9.4 データベースを使用しています。単体テストにも Arquillian を使用しています。私にとって、唯一の顕著な違いは、データベース内のレコードの数です。表
のpower
列はです。mytable
numeric(10,3)
次のような醜いコードは避けたいです。
if (singleResult instance of Double) {
...
} else if (singleResult instance of BigDecimal) {
...
}
実行環境に関係なく、常に同じインスタンスを持つ方法はありますか?