【问题标题】:How to fetch data from joined tables straight to a class?如何从连接表中直接获取数据到类?
【发布时间】:2017-07-26 11:13:22
【问题描述】:

是否可以将查询中的数据直接检索到EmployeeForm

查询为存储过程empdata

SELECT a.name,b.username,b.password FROM Tbemployee left join Tbuser

代码

   List<EmployeeForm> form = new ArrayList<EmployeeForm>();
    EmpDB service = (EmpDB) RuntimeAccess.getInstance().getServiceBean(
    service.begin();
    Session session = service.getDataServiceManager().getSession();
    SQLQuery query = session.createSQLQuery("EXEC empdata");
    List list = query.list();
    formList = list;

这给了我一个错误:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.emp.form.EmployeeForm

【问题讨论】:

  • 使用JPA 进行对象/关系映射。
  • 你是说我可以制作不是数据库表的实体吗?
  • 是的,使用ResultTransformer
  • 查看thisthis 以供参考。
  • 谢谢先生 resulttransformer 就是我要找的

标签: java sql hibernate


【解决方案1】:

您需要使用ResultTransformer

另一个选项是转换为List&lt;Object[]&gt;,其中包含来自查询结果的列的行,然后迭代并提取数据(更多工作)。

变压器可能是这样的:

query.setResultTransformer(Transformers.aliasToBean(EmployeeForm.class));

【讨论】:

  • 这可行,但是当我添加日期列时,它给了我一个错误“org.hibernate.property.BasicPropertyAccessor - 预期类型:java.util.Date,实际值:java.lang.String”确实这个结果转换器返回所有值的字符串?
  • 不,如果您在 DB 端的列是日期,它也适用于日期。
  • 错误现在消失了。我的日期是日期时间,所以我使用 cast 将其转换为我认为导致错误的日期?它也接受空值吗?
  • 我在所有常见的数据类型上都试过了,唯一的例外是布尔值。如果 boolean 为空,它会给我一个错误。但是在这种情况下适用于 null 的情况。谢谢先生。
  • 使用 Boolean 包装器,而不是 boolean 原语。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2021-08-10
相关资源
最近更新 更多