У меня не установлена MySql база данных. Итак, я приведу ниже пример для MariaDB, который очень похож.
- Вы должны объявить свой спящий диалект, который расширяет наиболее подходящий для вас существующий диалект. Он зарегистрирует функцию
extractvalue
, которую вы должны использовать.
import org.hibernate.dialect.MariaDB103Dialect;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.type.StandardBasicTypes;
public class MyMariaDBDialect extends MariaDB103Dialect
{
public MyMariaDBDialect()
{
super();
registerFunction("extractvalue", new StandardSQLFunction("extractvalue", StandardBasicTypes.TEXT));
}
}
Тогда вы должны объявить этот диалект в своем весеннем ботинке
application.properties
:
spring.jpa.properties.hibernate.dialect=com.app.MyMariaDBDialect
И теперь вы можете использовать эту функцию:
public interface DataRepository extends JpaRepository<Data, Long>
{
@Query("select extractvalue(d.data, :path) from Data d where d.id = :id")
String findDataElement(@Param("id") Long id, @Param("path") String path);
}