JPA:JQL和SQL之间的差异

时间:2010-12-04 16:36:12

标签: java sql database jpa jql

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

例如:

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

此代码可以使用Java持久性查询语言。

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

使用类似的代码和对Customer的原生查询投射将无效,将引发ClassCastException

这导致了一个问题: 是否可以使用SQL从本机查询创建对象?

2 个答案:

答案 0 :(得分:4)

我想你可以,看一下documentation的createNativeQuery(有2个参数的那个;我的链接有问题)

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

答案 1 :(得分:1)

我显然没有看到那一个。它似乎比学习JQL更方便。

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

  

我不能确定,但​​你可以   遇到区分大小写的问题   这在使用时很常见   原生查询。 JPA默认字段   姓名为大写,如果你是   使用可能返回的数据库   fieldnames为小写,因为Java   字符串比较区分大小写   可能找不到该字段。这个   将导致结果集返回   当它查找值时为null   “ID”。

引自Oracle Forums - primary key detected to be null, but it isn't

感谢您的快速回答。