我只需回答一个非常具体的问题:
例如:
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从本机查询创建对象?
答案 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
感谢您的快速回答。