如何解决无法在 Spring Boot Data Cassandra App 中运行应用程序,因为语法查询错误在字符 'ı' 处没有可行的替代方案
我已经开始开发一个 spring boot data cassandra 应用程序。我正在使用 Cassandra 在 SpringConfigurationClass 中进行配置。当我启动应用程序时,它会抛出 SyntaxError 和 CassandraQuerySyntaxException。开始时,为 Account Entity 表创建一个 cql。它有一个时间戳字段,即“private Date createdAt”。
通常,时间戳具有“i”字符,但 cql 具有“ı”,因此它尝试运行具有“tımestamp”的 cql。
Caused by: org.springframework.data.cassandra.CassandraQuerySyntaxException:
Query; CQL [CREATE TABLE IF NOT EXISTS accounts (created_at tımestamp,email text,id text,is_active boolean,passwd text,uname text,PRIMARY KEY (id));];
line 1:49 no viable alternative at character 'ı'; nested exception is
com.datastax.oss.driver.api.core.servererrors.SyntaxError:
line 1:49 no viable alternative at character 'ı'
我该如何解决这个问题并继续?
我的配置类:
@Configuration
@EnableCassandraRepositories
public class CassandraConfiguration extends AbstractCassandraConfiguration {
@Value("${accountservice.cassandra.keyspace.name}")
private String keyspaceName;
@Value("${accountservice.cassandra.port}")
private int port;
@Value("${accountservice.cassandra.contact.point}")
private String contactPoint;
@Value("${accountservice.cassandra.uname}")
private String uname;
@Value("${accountservice.cassandra.passwd}")
private String passwd;
@Override
protected String getKeyspaceName() {
return keyspaceName;
}
public String getPasswd() {
return passwd;
}
public String getUname() {
return uname;
}
@Override
protected String getContactPoints() {
return contactPoint;
}
@Override
protected int getPort() {
return port;
}
@Override
public String[] getEntityBasePackages() {
return new String[] {"com.trius.accountservice"};
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Override
public CqlSessionFactoryBean cassandraSession() {
CqlSessionFactoryBean cqlSessionFactoryBean = super.cassandraSession();
cqlSessionFactoryBean.setPassword(getPasswd());
cqlSessionFactoryBean.setUsername(getUname());
return cqlSessionFactoryBean;
}
}
My Table:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = {"id"})
@ToString
@Table(value = "accounts")
public class Account implements Serializable {
@PrimaryKey
private String id = UUID.randomUUID().toString();
@Column(value="uname")
private String username;
@Column(value="email")
private String email;
@Column(value="passwd")
private String passwd;
@Column(value="is_active")
private Boolean active;
@Column(value="created_at")
private Date createdAt;
}
解决方法
CQL 语句中似乎无意中包含了扩展或特殊字符。
如果您已在 Windows 计算机上从 Word 文档等文件复制并粘贴架构定义,请确保先对其进行清理。例如,您可以将架构粘贴到记事本中并将其另存为文本文件,然后将该文件用作源。干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。