У меня есть необходимость вызвать хранимую процедуру при вставке объекта. Для этого я использую @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