在我的项目中,我使用 spring-data-jdbc 版本 2.0.4.RELEASE,但我遇到了如何为表指定架构的问题。实体类看起来像这样
@Data
@Table(value = "alpha.op_organization")
public class OrganizationEntity {
@Id
private Long id;
@Column(name="name")
private String name;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用 jdbc 存储库方法保存实体,save如下所示
OrganizationEntity organization = new OrganizationEntity();
organization.setName("OrgName1");
organizationRepository.save(organisation)
Run Code Online (Sandbox Code Playgroud)
我遇到异常“关系 alpha.op_organization 不存在。相应的 sql 查询是
INSERT INTO "alpha.op_organization" ("name") VALUES (?)
Run Code Online (Sandbox Code Playgroud)
IE。事实证明,我们正在尝试在表“alpha.op_organization”中插入条目,而不是在模式 alpha 的表 op_organization 中插入条目。
我尝试自定义 NamingStrategy 以返回模式 alpha,但没有成功。
@Configuration
public class AppConfig extends AbstractJdbcConfiguration {
@Bean
public NamingStrategy namingStrategy() {
return new NamingStrategy() {
@Override
public String getSchema() {
return "alpha";
}
};
}
} …Run Code Online (Sandbox Code Playgroud) 我尝试声明并使用带有 spring-data-jdbc 存储库的 deleteBy 方法,如下所示
public interface TokenRepository extends CrudRepository<OpToken, Long> {
void deleteByBreed(Long breed);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调用方法时
private TokenRepository tokenRepository;
...
...
tokenRepository.deleteByBreed(123L);
Run Code Online (Sandbox Code Playgroud)
我得到异常:MethodNotFoundException:
java.lang.NoSuchMethodException: void.()
我决定,删除方法应该返回它处理的行数。所以,我像这样重写我的存储库界面
public interface TokenRepository extends CrudRepository<OpToken, Long> {
long deleteByBreed(Long breed);
}
Run Code Online (Sandbox Code Playgroud)
但现在我遇到了另一个异常:org.springframework.jdbc.In CorrectResultSetColumnCountException:不正确的列计数:预期 1,实际 4
它看起来像方法返回实体或它尝试删除的实体列表。但我不需要它们。在我的情况下如何声明这个方法?
按实体看起来像这样:
@Data
public class OpToken implements Persistable<Long> {
@Transient
private boolean newEntity;
@Id
@Column("jti")
private Long jti;
@Column("breed")
private Long breed;
@Column("id_account")
private Long idAccount;
@Column("exp")
private Date exp;
@Override
public Long getId() {
return jti;
} …Run Code Online (Sandbox Code Playgroud)