Liquibase创建Cassandra表时List/Set类型字段报错的解决方法
解决Liquibase创建Cassandra集合类型字段的XML解析异常问题
问题根源
你遇到的org.xml.sax.SAXParseException是因为XML解析器把list<text>里的<text>当成了XML标签,而非字段类型的一部分,违反XML语法规则导致解析失败。
正确实现方式
针对Cassandra的List/Set集合类型,Liquibase的XML changelog需要规避XML解析对尖括号的误判,以下是几种可行方案:
方案1:使用XML转义字符替换尖括号
将类型声明里的<转义为<,>转义为>,示例代码:
<createTable tableName="your_target_table"> <column name="id" type="uuid" constraints="primaryKey"/> <column name="temps" type="list<text>"/> </createTable>
方案2:用CDATA块包裹类型定义
CDATA块内的内容不会被XML解析器当作标签处理,适合直接写原始类型语法:
<createTable tableName="your_target_table"> <column name="id" type="uuid" constraints="primaryKey"/> <column name="temps"> <type><![CDATA[list<text>]]></type> </column> </createTable>
方案3:改用YAML格式的changelog(推荐)
YAML语法对尖括号的兼容性更好,无需额外转义,直接声明集合类型即可:
databaseChangeLog: - changeSet: id: create-target-table author: your-name changes: - createTable: tableName: your_target_table columns: - column: name: id type: uuid constraints: primaryKey: true - column: name: temps type: list<text>
额外验证要点
- 确保项目已引入Liquibase Cassandra扩展依赖,版本需与Liquibase核心版本兼容:
<!-- Maven依赖示例 --> <dependency> <groupId>org.liquibase.ext</groupId> <artifactId>liquibase-cassandra</artifactId> <version>4.25.0</version> </dependency>
- 检查changelog文件的XML/YAML语法是否完整,避免未闭合标签或格式错误
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

