Eclipse ジュノ IDE を使用しています。
私はクライアントサーバーアプリケーションを持っています。サーバー側にはエンティティ (Travels) があり、JPA クエリを処理する別のクラスがあります。データベースからデータを受信していますが、それをベクトルとしてクライアントに送信しようとすると、クライアント側で例外が発生し、「pack.db.Travels を java.util にキャストできません。ベクター"
これが私のコードです: エンティティ:
package pack.db;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Time;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Travels implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name="id")
private int id;
@Column(name="taxi_number")
private String taxiNumber;
@Column(name="travel_date")
private Date travelDate;
@Column(name="travel_time")
private Time travelTime;
@Column(name="cost")
private Double travelCost;
public Travels() {
super();
}
public void setNumber(String number)
{
this.taxiNumber = number;
}
public void setDate(Date date)
{
this.travelDate = date;
}
public void setTime(Time time)
{
this.travelTime = time;
}
public void setCost(Double cost)
{
this.travelCost = cost;
}
}
クエリクラス
public Vector retrieveAllTravelsData(Date[] travelDate, Time[] travelTime) {
List<Object[]> allTravels = (List<Object[]>)em.createQuery("SELECT t FROM Travels t WHERE t.travelDate between ?1 and ?2 and " +
"t.travelTime between ?3 and ?4")
.setParameter(1, travelDate[0])
.setParameter(2, travelDate[1])
.setParameter(3, travelTime[0])
.setParameter(4, travelTime[1]).getResultList();
return (Vector) allTravels;
}
したがって、クライアント側で JTABLE を設定する必要があるため、「allTravels」をベクトルとしてクライアント側に送信する必要があります。だから私はクエリからの戻りデータをOBJECT []にキャストしようとしました(JTABLEのコンストラクターは行にObject [] []を必要とするため)、それを送信しようとしました..しかし、クライアント側で例外が発生します「pack.db.Travel を java.util.Vector にキャストできません」.. クライアント側に travel エンティティを追加する必要はないと思います..どうすればデータをクライアントに送信できますか?
より具体的には..私はJDBCの実装でこのコードを持っています
public Vector retrieveAllTravelsData(Date[] travelDate, Time[] travelTime) {
Vector rows_data = new Vector();
String sql = "SELECT * FROM taxis.travels " + " WHERE travel_date BETWEEN ? AND ? AND travel_time BETWEEN ? AND ?";
try {
statement = (PreparedStatement) connection.prepareStatement(sql);
statement.setDate(1, travelDate[0]);
statement.setDate(2, travelDate[1]);
statement.setTime(3, travelTime[0]);
statement.setTime(4, travelTime[1]);
rs = statement.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int cols_count = meta.getColumnCount();
while (rs.next()) {
Vector record = new Vector();
for (int i = 0; i < cols_count; i++) {
record.add(rs.getString(i+1));
}
rows_data.addElement(record);
}
} catch (SQLException e) {
while (e != null) {
e.printStackTrace();
e = e.getNextException();
}
}
return rows_data;
ここでは、各列から各列データを取得してレコードとして保存し、それをベクターに入れることができます。では、JPAでどのように実装できますか? 出来ますか?