我需要在插入实体时调用存储过程。为此,我正在使用@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 (?, ?, ?, ?, ?, ?) }
会产生不利影响
在我们应用程序的其他部分。答案 0 :(得分:0)
找到了解决方案:使用{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 (?, ?, ?, ?, ?)")