Схема динамической базы данных @SQLInsert - PullRequest
0 голосов
/ 31 августа 2018

У меня есть необходимость вызвать хранимую процедуру при вставке объекта. Для этого я использую @SQLInsert, который работает хорошо. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность изменять часть строки во время интеграционных тестов, так как мы используем другую схему базы данных.

Сущность (удаленные / удаленные установки для экономии места):

@Entity
@Table(name = "SNIPPET")
@SQLInsert(sql = "{ call MY_SCHEMA.INSERT_SNIPPET (?, ?, ?, ?, ?, ?) }", callable = true)
public class Snippet extends BaseDomain {

@Lob
@Column(name = "SNIPPET_TEXT_V2", nullable = false)
private String snippetText;

@Column(name = "ORDER", nullable = false)
private int snippetOrder; //1 based.

@Column(name = "NOTES", nullable = true)
private String snippetNotes;

@Column(name = "STATUS", nullable = false)
@Enumerated(EnumType.STRING)
private Status status;

@ManyToOne
@JoinColumn(name = "QUERY_ID")
private Query query;

}

Это строка, которую я хочу изменить при запуске / тестовом запуске: @SQLInsert(sql = "{ call MY_SCHEMA.INSERT_SNIPPET (?, ?, ?, ?, ?, ?) }", callable = true)

Мне нужно сделать MY_SCHEMA переменным / регулируемым во время выполнения. Есть ли способ сделать это с помощью отражения или других средств?

Несколько замечаний -

  • Установка схемы по умолчанию для моего соединения не работает. Мы используем USER_SCHEMA для подключения к БД и сохранения объектов в MY_SCHEMA. Изменение схемы по умолчанию на MY_SCHEMA и использование { call INSERT_SNIPPET (?, ?, ?, ?, ?, ?) } будет иметь неблагоприятные последствия на других частях нашего приложения.
  • Версии - oracle 11g, java 8, hibernate 5.2

1 Ответ

0 голосов
/ 19 июля 2019

Нашел решение: используя {h-schema} который использует свойство spring.jpa.properties.hibernate.default_schema value.

Пример:

@SQLInsert(check=ResultCheckStyle.NONE, sql = "insert into {h-schema}tabla (campo1, campo2, campo3, campo4, campo5) values (?, ?, ?, ?, ?)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...