java - 使用 Hibernate 从数据库检索列表时出现 ClassCastException

标签 java spring hibernate rest

@Id
@Column(name="Item", unique = true, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int itemId;

@Column(name="ItemName")
private String itemName;

@Column(name="ItemPrice")
private double itemPrice;

@Column(name="status")
private String status;

@Column(name="image")
private String image;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "RestaurantId", nullable = false)
private Restaurant restaurant;

这是我的实体类,

public List<FoodItem> getFoodItems(Restaurant restaurant) {
    Session session=getSession();
    List<FoodItem> list=null;
    NativeQuery<?> query = session.createNativeQuery("SELECT " + 
            "   \"Item\"," + 
            "   \"ItemName\"," + 
            "   \"ItemPrice\"," + 
            "   \"RestaurantId\"," + 
            "   \"status\"," + 
            "   \"image\" " + 
            "FROM \"SYSTEM\".\"FoodItem\" where \"RestaurantId\"="+restaurant.getRestaurantId());
    list = (List<FoodItem>) query.getResultList();
    return  list;
}

当我运行此方法时,它不会返回 List<FoodItem>相反,它返回 List<Array>像这样,

[
[
    1,
    "Pasta",
    55,
    14,
    "Veg",
    null
],
[
    2,
    "Burger",
    35,
    14,
    "Veg",
    null
]
]

如果我尝试将列表中每个对象中的餐厅对象设置为 null,

for(int index=0 ;index< list.size();index++)
        list.get(index).setRestaurant(null);

我得到了 ClassCastException。 我需要根据我的实体类的键:值对中的响应 谁能帮我解决这个问题。 谢谢。 [更新]解决了!

最佳答案

您假设从 native 查询中获取对象数组列表。它不会为您构造开箱即用的类型对象。如果您想要类型化列表,则需要执行 JPQL 而不是 native 查询。

List<Object[]> listResults = query.getResultList();

迭代列表并构造类型化对象列表 -

List<FoodItem> foodItems = new ArrayList();

for (Object[] record : listResults) {

       FoodItem item = new FoodItem();
       // set values from record, do necessary casts as well.

       foodItems.add(item);

  }

关于java - 使用 Hibernate 从数据库检索列表时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54178218/

相关文章:

java - 无法在我的类中使用 onBindViewHolder 实现扩展 RecyclerView.Adapter

java - 如何使用 Spring Webflux Webclient 窃听日志记录更新 threadContext

java - Spring启动时出现firebird数据库错误

java - Hazelcast 锁不提供同步

Spring Data JPA - 返回 Future

hibernate - 如何使用 Criteria API 指定悲观锁?

java - 在 Hibernate 中查询内部事件监听器的最佳实践

java - hibernate 查询,用于搜索部分字符串

java - H2 不删除临时表的序列

java - 编写数学方程