4

我只需要一个非常具体的问题的答案:

例如:

Customer c =(Customer) manager.createQuery("SELECT c FROM Customer c").getResultList().get(0);

由于使用了 Java Persistence Query Language,此代码有效。

Customer c = (Customer) manager.createNativeQuery("SELECT * FROM Customer LIMIT 1").getSingleResult();

使用类似的代码和本地查询转换为 aCustomer将不起作用,aClassCastException将被引发。

这就引出了一个问题: 是否可以使用 SQL将对象创建为本地查询的结果?

4

2 回答 2

4

我认为您可以,请查看createNativeQuery的文档(具有 2 个参数的文档;链接有问题)

只需将您想要的类传递给 createNativeQuery 调用....

于 2010-12-04T16:39:54.510 回答
1

我显然没见过那个。这似乎是比学习 JQL 方便得多的方法。

但是还有另一个问题可能是一个潜在的陷阱:在某些情况下,您需要以大写字母输入字段名称。

我不能确定,但​​您可能会遇到区分大小写的问题,这在使用本机查询时很常见。JPA 将字段名称默认为大写,如果您使用的数据库可能会将字段名称返回为小写,因为 Java 字符串比较区分大小写,因此可能找不到该字段。这将导致结果集在查找“ID”的值时返回 null。

引用自Oracle 论坛 - 检测到主键为空,但它不是

感谢您的快速答复。

于 2010-12-04T17:01:08.150 回答