Hibernate を使用してデータベースのものを管理している .jsp webapp が動作しています。webapp が時間とともに成長するにつれて、サーバーのメモリの問題に直面するようになりました。そのため、メモリの消費量を減らすために少し書き直す必要があります。
私のコードは次のとおりです。
@Table(name="items")
public class Items implements Serializable {
@Id
@GeneratedValue
@Column(name="ID")
private long id;
@Column(name="Name", nullable=false)
private String name;
@Column(name="Image", nullable=true, length=1048576)
private byte[] image;
@Column(name="Text", nullable=true, columnDefinition="TEXT")
private String text;
@Column(name="AvailablePieces", nullable=true)
private int storedAmount;
@Column(name="Price", nullable=true)
private int price;
@ManyToOne
@JoinColumn(name="colorId")
private ItemColors color;
@OneToMany(mappedBy = "key.item")
@Cascade(CascadeType.ALL)
Set<Orders_Items> orderItems = new HashSet<Orders_Items>();
....
}
そしてSELECTは
@NamedQuery(itemsByName",
query = "* FROM Items i WHERE (i.name LIKE '%' || :iname || '%')"
),
問題は、一般的な使用法では一度に最大 500 件のレコードをフェッチすることですが、画像を表示する必要があるのは約 10 ~ 15 件だけです。
1 つの SELECT で画像を除くすべての列を選択するように Hibernate に指示する方法はありますか? その後、その画像を必要とする項目が計算されて、別の SELECT を実行して画像を取得します ("SELECT i.image FROM Items i WHERE i のようなもの) .id = :id")?
言い換えれば: @ManyToOne マップされた列を含む特定の列を選択するための適切な構文は何ですか?「SELECT i.color FROM...」のようなものに対して ClassCastException をスローしますか?