通貨を変換するJava EEアプリケーションを作成しました。ユーザーは変換する値、「元」通貨、および「to」通貨を入力し、データベース表から変換率を取得します。JPQLを使用してデータベースから行データを取得
! [NetBeansでテーブルの断片] https://s16.postimg.org/8m242gyyd/Screen_Shot_2016_12_03_at_23_45_23.png
マイ通貨コントローラは、次のコードを持っている:
public double convertTo(double value, String fromCur, String toCur) {
TypedQuery<Rate> query = em.createQuery(""
+ "SELECT c FROM Rate c WHERE c.fromCur = 'BRA' AND c.toCur = 'EUR'", Rate.class);
query.setParameter("tocurrency", toCur);
query.setParameter("fromcurrency", fromCur);
Rate result = query.getSingleResult();
if (result == null) {
throw new EntityNotFoundException("Can't find rate");
}
return value * result.getValue();
}
私の目標は、例えば、「EUR」に「BRA」から速度を取得し、変換量を計算することですそれを返す。私は、アプリケーションを実行すると、私は例外を取得:
は、getSingleResult()任意のエンティティ
を取得できませんでしたが
エンティティマネージャを使用して、この変換を計算するために、データベースからレートを取得するための簡単な方法がなければなりません私はそれのための適切なクエリメソッドまたはJPAソリューションを見つけることができません。助言がありますか?
Rate.javaは以下であるJavaエンティティへのコード:
package currency.model;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
*
* @author teowey
*/
@Entity
public class Rate implements ConversionDTO, Serializable {
@Id
@GeneratedValue
private Integer conversionid;
private double rate;
private BigDecimal value;
private String fromCur;
private String toCur;
/**
* Creates a new instance of Account
*/
public Rate() {
}
@Override
public Integer getConversionId() {
return conversionid;
}
public void setConversionId(Integer conversionid) {
this.conversionid = conversionid;
}
@Override
public BigDecimal getValue() {
return value;
}
public void setRate(double rate) {
this.rate = rate;
}
public double getRate(String conversion) {
return rate;
}
public String getFromCur() {
return fromCur;
}
public void setFromCur(String from) {
this.fromCur = from;
}
public String getToCur() {
return toCur;
}
public void setToCur(String to) {
this.toCur = to;
}
}
この例外が発生した場合、探している行が存在しないことを意味します。たぶんあなたは別のテーブルやスキーマを照会しているかもしれません。あるいは、データベースに加えられた変更をコミットしなかったかもしれません。 –
問題はデータベースではなく、私はすべて正しく構成されています。スクリーンショットには、通貨BRAとその最初の行の通貨EURのテーブルがあります。私の問題は、ロールからデータを取得し、Entityオブジェクト(Rate)に入れてメソッドの値として使用することです。私が使用しているJPQLクエリは正しいものではありません。使用するクエリーとエンティティマネージャメソッドを理解するのは苦労しています。 – teowey
エンティティのコードを投稿していないので、そこにバグを見つけることは難しいです。クエリにはパラメータもありませんが、パラメータを渡しています。しかし、クエリが無効な場合、別の例外が発生します。例外は、クエリが実行されたが、何も返されていないことを明確に示しています。 –