Стратегии со смешанными параметрами - используйте только одну из именованных, позиционных или JPA-порядковых стратегий - PullRequest
0 голосов
/ 03 января 2019

Я вызываю функцию из базы данных 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, которая возвращает строку.

Спасибо. Дайте мне знать, если потребуется дополнительная информация.

1 Ответ

0 голосов
/ 03 января 2019

Ниже приведен пример вызова функции с помощью JPA:

Object result = entityManager.createNativeQuery("SELECT his.get_abc(:mrno) FROM DUAL")
                                      .setParameter("mrno", completeMrno)
                                      .getSingleResult();
String value = new String(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...