Java 在具有外部属性的表上使用hibernate选择除一列以外的所有列

Java 在具有外部属性的表上使用hibernate选择除一列以外的所有列,java,hibernate,Java,Hibernate,我有一个正在使用Hibernate管理数据库内容的working.jspWebApp。随着webapp的发展,我现在面临服务器上的内存问题。所以我需要重写它一点,以消耗更少的内存 我的代码如下: @Table(name="items") public class Items implements Serializable { @Id @GeneratedValue @Column(name="ID") private long id; @Column(name="Name

我有一个正在使用Hibernate管理数据库内容的working.jspWebApp。随着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>();

....

}
问题是,一个常见的用法是一次获取约500条记录,而只需要显示约10-15条记录的图像

有没有一种方法可以告诉Hibernate在一个select中选择除图像之外的所有列,然后在稍后计算需要其图像的项目时执行另一个select以检索图像(类似于“select i.Image FROM items i WHERE i.id=:id”)


换句话说:选择特定列(包括@ManyToOne映射列)的正确语法是什么?它会引发ClassCastException,例如“选择i.color FROM…”?

使用投影功能:

另一种是执行延迟抓取:


从项目i中选择i.columnName,i.otherColumnName,其中…
这可能不会映射到您的实体。只是不要将图像映射到它。当你想要一些实体的图像时,使用一个特定的查询来加载它们。@XtremeBiker我不知道为什么我没有想到这一点。。太明显了。。谢谢
@NamedQuery(itemsByName",
    query = "* FROM Items i WHERE (i.name LIKE '%' || :iname || '%')"
),