Большой! я обновил ответ, чтобы другие пользователи знали

ичок в Spring Jpa и Hibernate. Я пытаюсь получить данные с помощью пользовательской функции из базы данных Oracle. Я мог бы определить сущность вместе с соответствующим сервисом, реализацией и хранилищем. Кроме того, я создал новый пользовательский диалект Oracle, используяregisterFunction как вы увидите ниже.

Итак, у меня есть два вопроса:

1) В моей базе данных Oracle функция находится под другой схемой. Нужно ли указывать его схему? Если так, то как? Или hibernate найдет его автоматически?

Я задам свой второй вопрос в конце этого поста после предоставления полной трассировки стека ...

Вот мой полный след стека:

MyOracle10gDialect

package blog;

import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.StandardSQLFunction;


public class MyOracle10gDialect extends Oracle10gDialect {

    public MyOracle10gDialect() {
        super();
        registerFunction("my_function", new StandardSQLFunction("my_function"));
    }

}

application.properties

...
spring.jpa.database-platform=blog.MyOracle10gDialect
...

Сущность:

package blog.models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "item", schema = "WOS_SOURCE")
public class WosItem {

    @Id
    @Column(nullable = false)
    private String UT;

    @Column(nullable = false)
    private String TI;

    public String getUT() {
        return UT;
    }

    public void setUT(String UT) {
        this.UT = UT;
    }

    public String getTI() {
        return TI;
    }

    public void setTI(String TI) {
        this.TI = TI;
    }

    public WosItem(String UT, String TI) {
        this.UT = UT;
        this.TI = TI;
    }

    public WosItem() { }

    @Override
    public String toString() {
        return "WosItem{" +
                "UT='" + UT + '\'' +
                ", TI='" + TI + '\'' +
                '}';
    }
}

Обслуживание:

package blog.services;

import blog.models.WosItem;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface WosItemService {

    List<WosItem> findAll();
    WosItem findById(String id);
    String find_ut(Long ut_seq);
}

Реализация:

package blog.services;

import blog.models.WosItem;
import blog.repositories.WosItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class WosItemServiceJpaImpl implements WosItemService {

    @Autowired
    private WosItemRepository wosItemRepository;

    @Override
    public List<WosItem> findAll() {
        return this.wosItemRepository.findAll();
    }

    @Override
    public WosItem findById(String id) {
        return this.wosItemRepository.findOne(id);
    }

    @Override
    public String find_ut(Long ut_seq) {
        return this.wosItemRepository.find_ut();
    }
}

Repository:

package blog.repositories;

import blog.models.WosItem;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;


@Repository
public interface WosItemRepository extends JpaRepository<WosItem, String> {
    @Query("SELECT function('my_function', input) FROM WosItem wos");
    String find_ut();
}

Так что в моей базе данных Oracle я могу использовать эту функцию, как показано ниже:

select other_schema.my_function(aa.input) from my_schema.TABLE aa;

Например скажем aa.input332708100009 потом возвращается000332708100009

Что касается моего второго вопроса:

2) Как я могу выполнить этот процесс в jpa? Я знаю, что мой репозиторий не является правильным. Я получаю сообщение об ошибке типа «Аннотации здесь не разрешены». Я не мог найти способ исправить это.

Заранее спасибо.

РЕДАКТИРОВАТЬ ПО ИСКЛЮЧЕНИЮ:

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: 'function (my_function)'
    +-[METHOD_NAME] IdentNode: 'my_function' {originalText=my_function}
    \-[EXPR_LIST] SqlNode: 'exprList'
       \-[NAMED_PARAM] ParameterNode: '?' {name=ut_seq, expectedType=null}

Ответы на вопрос(1)

Ваш ответ на вопрос