【问题标题】:Reading embedded collection from database Hibernate从数据库 Hibernate 中读取嵌入式集合
【发布时间】:2026-02-04 17:30:01
【问题描述】:
Query queryShift=session.createQuery("select e from employee e join fetch e.calShiftlist");
List<Object[]> listShift=null;
listShift= queryShift.list();
for (Object[] listShift1 : listShift) {
    System.out.println(Arrays.toString(listShift1));
}

我在输出中得到的是这个错误:

java.lang.ClassCastException: model.employee cannot be cast to [Ljava.lang.Object;

即使我设法读取数据,我也会在 objcet 上获取输出引用,而不是获取实际值(字符串)

[model.calShift@602c403c, model.calShift@e2169cd, model.calShift@71808aa4, model.calShift@420c8275,

这是我的嵌入式类

@Embeddable
public class calShift implements Serializable {

    String shift;

    public String getShift() {
        return shift;
    }

    public void setShift(String shift) {
        this.shift = shift;
    }

}

这就是我嵌入集合的方式

............

.
.
.
@ElementCollection
@JoinColumn(name = "ID")
private List<calShift> calShiftlist=new ArrayList<calShift>();
.
. 
.

【问题讨论】:

  • 好吧,用员工 x 替换对象)
  • {Query queryShift=session.createQuery("select e from employee e join fetch e.calShiftlist"); List listShift=(List)queryShift.list(); for (员工 listShift1 : listShift) { System.out.println(listShift1); }} 我的输出是这样的:model.employee@645b0177
  • 那是因为对象是这样打印的。如果您想在打印员工时输出其他内容,请覆盖员工类中的 toString() 方法。
  • 我必须在我的 calShift 类中更改 toString ,tnx verymutch! :D
  • @IlijaPavlovic 其他问题呢? classCast 异常?

标签: java mysql hibernate netbeans


【解决方案1】:

当您读取数据库时,您已经获得了Employees。而您正试图将它们转换为 Object[],因此您的错误。

对于第二个问题,当你得到像model.calShift@602c403c 这样的东西时,它来自于你没有覆盖calShift 类的toString 方法。所以被调用的是来自Object 的那个,如您所见,它对用户并不友好。

【讨论】: