我正在使用Hibernate访问数据并将数据记录到数据库中。
在我使用HQL连接映射表并从数据库查询某些对象之前,一切都很好。结果,我得到了List<Object[]>
包含的数据。但是当我得到Object数组时,出现了异常
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:com.aperture.demo.entities.Order无法强制转换为[Ljava.lang.Object;
在com.aperture.demo.controller.MainAppController $ OrderTableMouseListener.mouseClicked(MainAppController.java:113) 在java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6536) 在javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access $ 500(EventQueue.java:97) at java.awt.EventQueue $ 3.run(EventQueue.java:709) at java.awt.EventQueue $ 3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue $ 4.run(EventQueue.java:733) at java.awt.EventQueue $ 4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我已经尝试过任何方式,例如,使List Iterable,将Object []转换为Order [](我的对象),但结果是相同的。我使用IDE的Debugger,但看起来很好,就像这个
(Stack Overflow不允许我在这里嵌入图片,抱歉!)
我不明白“[L”是什么意思,为什么它会让我的项目崩溃。
我的对象
@Entity
@Table(name = "orders")
public class Order extends MyObject implements Serializable {
//something
}
从DB
获取对象的方法public List<Object[]> listJoinedTable(int id) {
Transaction tx = null;
List<Object[]> result = null;
try (Session session = sessionFactory.openSession()) {
tx = session.beginTransaction();
//language=HQL
String hql = "SELECT o FROM Order o INNER JOIN FETCH o.productList WHERE o.orderId = " + id;
result = session.createQuery(hql).list();
tx.commit();
} catch (HibernateException e) {
if (tx != null) tx.rollback();
e.printStackTrace();
}
return result;
}
触发错误的代码
if (mouseEvent.getButton() == MouseEvent.BUTTON1) {
final JTable target = (JTable) mouseEvent.getSource();
final int row = target.getSelectedRow();
final int id = (int) mainAppFrame.getOrderList()
.getModel()
.getValueAt(0, 0);
List<Object[]> recordList = ((AdvancedLoader<Order>) orderLoader).listJoinedTable(id);
for (int i = 0; i < recordList.size(); i++) {
Order[] myObjects = (Order[]) recordList.get(i); //Bug here
}
}
请帮助我,非常感谢!
答案 0 :(得分:0)
&#34; [L&#34;表示该对象是long
的数组,您应该使用集合来接收结果。
答案 1 :(得分:0)
感谢XtremeBaumer,我解决了这个问题。 Hibernate很擅长返回你需要的类的对象(堡盟说),所以我们不需要使用List。只需使用List即可获得所需的对象。我用对象Product映射了对象Order,所以当我加入两个表时,我只得到一个对象是Order。如果您加入一些完全未映射的表,您可能仍需要List。