【发布时间】:2019-05-29 18:37:25
【问题描述】:
我正在从 Oracle 数据库调用函数并遇到此异常:
org.hibernate.engine.query.ParameterRecognitionException:混合参数策略 - 仅使用命名、位置或 JPA 序数策略之一
这是我的 User.java 实体。
@Entity
@Table(name = "users", schema = "myschema")
@javax.persistence.NamedNativeQuery(name = "getPass", query = "{? call = his.get_abc(:mrno)}", resultClass = User.class, hints = {
@javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") })
public class User {
@Id
@Column(name = "USERID", nullable = false)
private String userid;
@Column(name = "MRNO")
private String mrno;
private String username;
private String password;
private String fullName;
// Getters and Setters are written.
}
这就是我从我的一个服务类调用这个函数的方式。
public boolean validateUser(String mrno, String password) {
String completeMrno = utils.getMedicalRecordNumber(mrno);
EntityManagerFactory factory = Persistence.createEntityManagerFactory("his-dev");
EntityManager entityManager = factory.createEntityManager();
Query query = entityManager.createNamedQuery("getPass"); // <- this line is raising exception.
query.setParameter("mrno",completeMrno);
List<?> results = query.getResultList();
}
那么,为了调用返回字符串的 Oracle 函数,需要进行哪些更改。
谢谢。如果需要更多信息,请告诉我。
【问题讨论】:
-
只是删除?和=。尝试调用 his.get_abc(:mrno)
-
@SimonMartinelli 现在我得到 java.sql.SQLException: Invalid column index 调用
query.getResultList(); -
好的,这不适用于 Oracle。请看我的回答
-
好的,等待您的答复。
标签: spring hibernate spring-boot jpa-2.0